如何在 BlueHost 空间中用 PHP 以 SMTP 方式发送邮件

  用 PHP 发邮件的方法很多,但自从我体会到了 PEAR 的威力之后就喜欢上 Mail 类。你可以用 mail,sendmail 和 smtp 三种方式来借助 Mail 类发送邮件。话说几天前刚买了个 BlueHost 的空间,在上面跑程序的时候用 PHP 发邮件搞出点心得来,放在这里跟大家分享。

  首先我在系统中添加了一个邮件账户 test,密码 123456,然后写下了如下代码:

  1.  require_once( 'Mail.php' );
  2.  $conf = array(
  3.   'host'     => 'mail.yourdomail.com',
  4.   'auth'     => true,
  5.   'username' => 'test',
  6.   'password' => '123456'
  7.  );
  8.  $headers['From']         = 'noreply@yourdomain.com';
  9.  $headers['To']           = $To;
  10.  $headers['Subject']      = '=?GB2312?B?' . base64_encode( $Subject ) . '?=';
  11.  $headers['Content-Type'] = 'text/plain; charset=gb2312';
  12.  $Mail = & Mail::factory( 'smtp', $conf );
  13.  $res = $Mail->send( $To, $headers, $Content );
  14.  ?>

  $To 是想要发送到的信箱地址,比如 foobar@gmail.com,$Subject 是邮件主题,$Content 是 GB2312 编码的邮件正文。结果用以上程序屡试屡败,后来经过多次试验才得出在 BlueHost 主机上用 PHP 以 SMTP 方式发送邮件的正确方法,注意事项如下:
1) BlueHost 帮助信息中说跟你账户(域名)相对应的 SMTP 主机地址是 mail.yourdomain.com,但其实应该是 localhost。你用 mail.yourdomain.com 只会得到 SMTP 拒绝链接的错误信息。
2) SMTP 服务器需要验证才能发邮件。
3) SMTP 验证时用户名需要写 user+yourdomain.com,不能写 user@yourdomain.com。想想这个也好理解,在虚拟主机上一个 SMTP server 要支撑很多个账户,这种写法应该是为了区别发件的账户。
4) 邮件头中的发件邮件账户一定要是存在于系统中的真实账户,象我上面那样注册了一个 test@yourdomain.com,但是发件人账户又写 noreply@yourdomain.com 是不行的,只会得到这样的错误信息:
SMTP: Invalid response code received from server (code: 550, response: Verification failed for No Such User Here Sender verify failed)

  知道了上面这 4 个注意事项以后就好办了,删掉刚才注册的 test 邮件帐号,注册一个 noreply 帐号,修改程序如下:

  1.  require_once( 'Mail.php' );
  2.  $conf = array(
  3.   'host'     => 'localhost',
  4.   'auth'     => true,
  5.   'username' => 'noreply+yourdomain.com',
  6.   'password' => '123456'
  7.  );
  8.  $headers['From']         = 'noreply@yourdomain.com';
  9.  $headers['To']           = $To;
  10.  $headers['Subject']      = '=?GB2312?B?' . base64_encode( $Subject ) . '?=';
  11.  $headers['Content-Type'] = 'text/plain; charset=gb2312';
  12.  $Mail = & Mail::factory( 'smtp', $conf );
  13.  $res = $Mail->send( $To, $headers, $Content );
  14.  ?>

  邮件被成功的发送出去了,而且由于邮件服务器在美国,发送到 GMail 信箱非常之快,一般这边一发那边刷新一下就能看到新邮件:)

  这里再说些题外话,买了 BlueHost 的空间将近一周时间了,感觉美国的虚拟主机市场确实非常成熟,功能强大。跟国内价格还行但是配置超受限的主机比起来性价比高的不得了!只要你选对了服务提供商,可以说绝对让你满意。但是缺点也比较明显,就是速度实在是慢!这里面的原因众所周知,感谢伟大的电信运营商,感谢伟大的 GFW!

  今天跟 HostMonster 的客户沟通了一下,问问他们那边从中国过去的访问速度怎么样,估计人家遇到这样的情况不是个别现象,上来就是一句,我们对来自中国的访问速度无法做出承诺。

  国内的虚拟主机服务商有万网这样把大家当 SB 漫天要价的主,但是也有兢兢业业踏踏实实做服务的公司,不过性价比跟国外的运营商确实没法比。一边是价格高不了多少,动辄几十 G 空间几百 G 月流量,支持 SSH,支持多 Addon domain 的国外主机,一边是价廉物不太美的国内主机,我想诱惑力是不言而喻的。但是速度,唉,伤心是一种说不出的痛!

  价廉物美,速度又快的好主机,你在哪里???

2 Responses to “如何在 BlueHost 空间中用 PHP 以 SMTP 方式发送邮件”

  1. 双鱼 Says:

    价廉物美,速度又快的好主机,你在哪里???

    在哪里,在梦里!

    新年好!

    pear被你说的太好了,自己不是太了解,看来以后要好好研究一下了!

    国内的实验环境实在是差劲,稍微有点用处的就要收费,学好了技术,在赚国内的人民币!“外来的和尚回念经”,一点不假!

  2. 2ndboy Says:

    呵呵,PEAR 在 PHP 里面的位置大概类似于 STL 在 C++ 里面的位置,就是一组高手写就的成熟且功能强大的类库,用了它就是站在了巨人的肩上:)

Leave a Reply