一、问题
更换服务器之后,发送邮件功能失效了,报“SMTP Error:Could not connect to SMTP host”的错误。原来的服务器是可以的,我是用的PHPMailer,SMTP方式发送邮件的。
二、排查过程
首先PHP要开启sockets拓展,查了一下phpinfo页面,是开启的:
看了一下openssl也是开启(因为拿了qq邮箱来测),所以没问题:
那就再看一下allow_url_fopen,开启的,没问题:
是不是禁用了函数?没有禁用,没问题:
那配置上就没有问题了,我就想,是不是端口被占用了?
运行一下:netstat -tnlp
第一条就是这玩意:
25端口被占用,被一个叫master的玩意占了。
既然25端口不可用,于是我想,是否可以尝试一下其它端口,用465端口试试。
465端口(SMTPS):465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。
465端口似乎看起来还更好,直接就开始尝试了
<?php
header(
"content-type:text/html;charset=utf-8"
);
require
'PHPMailer/class.phpmailer.php'
;
try
{
$mail
=
new
PHPMailer(true);
$mail
->IsSMTP();
$mail
->CharSet=
'UTF-8'
;
$mail
->SMTPAuth = true;
$mail
->SMTPSecure =
'ssl'
;
$mail
->Port = 465;
$mail
->Host =
'smtp.mxhichina.com'
;
//邮箱smtp地址
$mail
->Username =
'gzp@gzpblog.com'
;
//你的邮箱账号
$mail
->Password =
'扒拉扒拉。。。'
;
//你的邮箱密码
$mail
->From =
'gzp@gzpblog.com'
;
//你的邮箱账号
$mail
->FromName =
'锅子'
;
$to
=
"扒拉扒拉@qq.com"
;
$mail
->AddAddress(
$to
);
$mail
->Subject =
"test"
;
$mail
->Body =
'hello!'
;
$mail
->WordWrap = 80;
//$mail->AddAttachment("f:/test.png"); //可以添加附件
$mail
->IsHTML(true);
$mail
->Send();
echo
"success!"
;
}
catch
(phpmailerException
$e
) {
echo
"邮件发送失败:"
.
$e
->errorMessage();
}
执行,成功!右下角弹出了QQ邮件的提醒。