当前位置:首页 > 电脑常识 > 正文

解决Linux处事器下phpwMailer发送邮件掉败的问题 8090安适门户

11-22 电脑常识

需求
改换处事器之后,我发明我的发送邮件成果掉效了!本来的处事器是可以的,必然是哪里出问题了,决定来排查一下。我是用的PHPMailer,SMTP方法发送邮件的。
排查过程

这种方法首先PHP要开启sockets拓展,查了一下phpinfo页面,是开启的:

解决Linux服务器下phpwMailer发送邮件失败的问题 8090安详门户

看了一下openssl也是开启(因为拿了qq邮箱来测),所以没问题:

是不是禁用了函数?没有禁用,没问题:

那配置上就没有问题了,我就想,是不是端口被占用了?
运行一下:netstat -tnlp
第一条就是这玩意:

解决Linux服务器下phpwMailer发送邮件失败的问题 8090安详门户

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

博客主人杰米WWW
杰米博客,为大家提供seo以及it方面技巧喜欢的朋友收藏哦!
  • 11365文章总数
  • 1378074访问次数
  • 建站天数
  •