手机版

解决Linux服务器下PHPMailer无法发送邮件的问题

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

要求

换了服务器后发现我的邮件发送功能失败了!原服务器还可以。一定有什么不对劲。我决定去看看。我用PHPMailer,SMTP发邮件。

筛选过程

这样,PHP应该首先打开sockets扩展,并检查打开的phpinfo页面:

看openssl,它也是开放的(因为我拿了qq邮箱去测试),所以没有问题:

然后再看allow_url_fopen,打开,没问题:

功能是否被禁用?未禁用,没问题:

然后配置没有问题,所以我就想,是不是端口被占用了?

运行它:netstat -tnlp

第一个是这个东西:

25号港口被占领了,被一个叫主人的东西占领了。孩子,看看这是什么。运行ps -f -p 1818查看结果。1818是当前程序的进程号PID。可以看出:

它是后缀,正在运行。它可能是在设置环境时意外安装的。

什么是后缀?

Postfix是一个运行在Linux环境下的免费邮件服务器,或者MTA(邮件传输代理),以及其他类似Sendmail、Qmail、exim和Zmailer的服务器。因此,Postfix是一个邮件服务器。那这东西肯定有冲突。我们必须通过端口25请求外部邮件服务器,但是邮件服务器通过端口25在本地运行。这是一个不可能的估计。

试着解决问题

让我们尝试使用我们的邮件服务器来发送邮件,而不是使用外部服务器(比如之前的阿里巴巴云企业邮件),并在相同级别的PHPMailer目录下放一个简短的测试代码:

?php标头(' content-type : text/html;charset=utf-8 ');需要“PHPMailer/class . PHPMailer . PHP”;尝试{ $ mail=new PHPMailer(true);$ mail-IsSMTP();$ mail-CharSet=' UTF-8 ';$ mail-SMTPAuth=true;$ mail-Port=25;$ mail-Host=' 127 . 0 . 0 . 1 ';//Email smtp地址$ mail-username='[电子邮件保护]';//您的电子邮件账号$mail-Password=' Bala Bala。';//您的电子邮件密码$ mail-From='[email protected]';//您的电子邮件账号$ mail-from name=' pot ';$ to=' Bala Bala @ qq.com$ mail-AddAddress($ to);$ mail-主题=“测试”;$mail-Body=“你好!”;$ mail-Wordwrap=80;$mail-IsHTML(真);$ mail-Send();回声“成功!”;} catch(phpmailerexception $ e){ echo '邮件发送失败:'。$ e-error message();}通过25端口本地服务器发送邮件,运行此页面,发现无法验证,说明还有一些配置要做,暂时不行,不要深究本地服务器发送。让我们试着切换回来:

$ mail-Host=' SMTP . mxh ichina.com ';//试试阿里巴巴云的邮箱smtp地址,还是不行:

无法连接到SMTP。然后我们杀死25端口的后缀服务器,执行kill 1818(当前后缀的PID),再执行一次,但还是同样的错误,无法连接。这很奇怪。端口25上没有运行程序,这是不够的。

可能的原因

发现可能是ipv6的原因。解析smtp服务器的DNS时,phpMailer获取IP v6地址,然后用IP v6解析的地址连接,导致连接失败。

让我试试:

ip -6地址显示

没什么,这不是问题。

这是什么原因呢?

解决问题

由于端口25不可用,不知道能否试试其他端口,试试端口465。

端口465 (SMTPS):端口465对SMTPS(基于SSL的SMTP)协议服务开放,这是基于SSL安全协议的SMTP协议的变体。它继承了SSL安全协议非对称加密的高安全性和可靠性,可以防止邮件泄露。SMTPS和SMTP协议一样,也是用来发邮件的,但是防止邮件被黑客拦截泄露更安全,还可以实现邮件发送者的防抵赖功能。阻止发件人在发送后删除已发送的电子邮件,并拒绝承认此类电子邮件已发送。

465端口似乎更好,所以我开始直接尝试。尝试以下操作,以下是命令:

Sbin/iptables-I输出-TCP-dport 465-j接受打开端口465

/etc/RC . d/init . d/iptables save save

服务iptables重启重启

/etc/init.d/iptables状态,查看要打开的端口是否有效?

看起来可行,现在尝试通过SMTP 465SSL连接发送邮件,稍微修改一下测试代码:

?php标头(' content-type : text/html;charset=utf-8 ');需要“PHPMailer/class . PHPMailer . PHP”;尝试{ $ mail=new PHPMailer(true);$ mail-IsSMTP();$ mail-CharSet=' UTF-8 ';$ mail-SMTPAuth=true;$ mail-SMtpSeCure=' SSL ';$ mail-Port=465;$ mail-Host=' SMTP . mxh ichina.com ';//Email smtp地址$ mail-username='[电子邮件保护]';//您的电子邮件账号$mail-Password=' Bala Bala。';//您的电子邮件密码$ mail-From='[email protected]';//您的电子邮件账号$ mail-from name=' pot ';$ to=' Bala Bala @ qq.com$ mail-AddAddress($ to);$ mail-主题=“测试”;$mail-Body=“你好!”;$ mail-Wordwrap=80;//$ mail-AddAttachment(' f :/test . png ');//可以添加附件$ mail-IsHTML(true);$ mail-Send();回声“成功!”;} catch(phpmailerexception $ e){ echo '邮件发送失败:'。$ e-error message();//测试时可以去掉这一行的注释。}执行,成功!右下角会弹出QQ邮件的提醒。

摘要

PHPMailer通过465端口发送邮件,以实现更安全的SMTPS协议

您可以修改:

$ mail-Port=465;是:

$ mail-SMtpSeCure=' SSL ';$ mail-Port=465;动手吧。

好了,这就是本文的全部内容。希望本文的内容能给你的学习或工作带来一些帮助。有问题可以留言交流。谢谢你的支持。

版权声明:解决Linux服务器下PHPMailer无法发送邮件的问题是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。