一个发送E-MAIL的脚本可能和简单,但也不是人人都会用的。其实这样的脚本我们常常会用到,比如clickbank销售的自动短信通知。下面就以bluehost为例,说一下如何利用php发送邮件。

首先在系统中添加了一个邮件账户 test,密码 123456,然后写下了如下代码:
require_once( ‘Mail.php’ );
$conf = array(
‘host’ => ‘mail.yourdomail.com’,
‘auth’ => true,
‘username’ => ‘test’,
‘password’ => ‘123456’
);
$headers[‘From’] = ‘noreply@yourdomain.com’;
$headers[‘To’] = $To;
$headers[‘Subject’] = ‘=?GB2312?B?’ . base64_encode( $Subject ) . ‘?=’;
$headers[‘Content-Type’] = ‘text/plain; charset=gb2312’;
$Mail = & Mail::factory( ‘smtp’, $conf );
$res = $Mail->send( $To, $headers, $Content );
$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)
之后,删掉刚才注册的 test 邮件帐号,注册一个 noreply 帐号,修改程序如下:
require_once( ‘Mail.php’ );
$conf = array(
‘host’ => ‘localhost’,
‘auth’ => true,
‘username’ => ‘noreply+yourdomain.com’,
‘password’ => ‘123456’
);
$headers[‘From’] = ‘noreply@yourdomain.com’;
$headers[‘To’] = $To;
$headers[‘Subject’] = ‘=?GB2312?B?’ . base64_encode( $Subject ) . ‘?=’;
$headers[‘Content-Type’] = ‘text/plain; charset=gb2312’;
$Mail = & Mail::factory( ‘smtp’, $conf );
$res = $Mail->send( $To, $headers, $Content );
邮件被成功的发送出去了,而且由于邮件服务器在美国,发送到 GMail 信箱非常之快,一般这边一发那边刷新一下就能看到新邮件。