BlueHost主机是支持使用MTP调用的方式发送邮件的,很多人都不知道如何使用PHP以SMTP方式发送邮件,本文将为大家分享具体的操作方式。
首先在系统中添加了一个邮件账户 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 );
这样的话,就可以使用PHP以SMTP方式的成功发送邮件了。