解决Linux处事器下phpwMailer发送邮件掉败的问题 8090安适门户
需求
改换处事器之后,我发明我的发送邮件成果掉效了!本来的处事器是可以的,必然是哪里出问题了,决定来排查一下。我是用的PHPMailer,SMTP方法发送邮件的。
排查过程
这种方法首先PHP要开启sockets拓展,查了一下phpinfo页面,是开启的:
看了一下openssl也是开启(因为拿了qq邮箱来测),所以没问题:
是不是禁用了函数?没有禁用,没问题:
那配置上就没有问题了,我就想,是不是端口被占用了?
运行一下:netstat -tnlp
第一条就是这玩意:
25端口被占用,被一个叫master的玩意占了,好家伙,看看是什么对象,运行ps -f -p 1818看一下功效,1818为当前这个措施的进程号PID,可以看到是:
是postfix这个对象在运行,可能搭建环境的时候不小心给装了。
postfix是个什么对象?
postfix是一款运行在Linux环境下免费的邮件处事器,或者称为MTA(Mail Transfer Agent),其它类似的有Sendmail、Qmail、exim及Zmailer 等。所以Postfix就是一个搭邮件处事器的。那这玩意必定是斗嘴了,我们要通过25端口请求外部的邮件处事器,而本地用25端口运行了一个邮件处事器,这个是不行的预计.
测验考试解决问题
我们测验考试一下用我们这个邮件处事器去发邮件,而不是用外部处事器(好比之前用阿里云企业邮),放了一小段测试代码到PHPMailer目录同级下:
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->Port = 25;
$mail->Host = '127.0.0.1';//邮箱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->IsHTML(true);
$mail->Send();
echo "success!";
} catch (phpmailerException $e) {
echo "邮件发送掉败:".$e->errorMessage();
}
通过25端口的本地处事器发送邮件,运行这个页面,发明不行,报错不能够验证,说明这此中还有一些配置要弄,暂时行欠亨,不往下深究本地处事器发送了,我们测验考试一下换回:
$mail->Host = ‘smtp.mxhichina.com'; //阿里云的邮箱smtp地点
试一下,还是不行:
没步伐连接到SMTP。那我们把25端口的postfix处事器杀失, 执行kill 1818(当前postfix的PID),再执行一次,还是同样错误,无法连接上。这就奇了怪了,25端口没有措施运行了,还不行。
可能的原因
查到有可能是因为ipv6的原因,phpMailer在进行smtp处事器DNS解析时,得到了IP v6地点,然后与IP v6解析到的地点进行连接,导致连接掉败。
我试一下:
ip -6 addr show
温馨提示: 本文由杰米博客推荐,转载请保留链接: https://www.jmwww.net/file/pc/13239.html