解决Linux服务器下PHPMailer无法发送邮件的问题
要求
换了服务器后发现我的邮件发送功能失败了!原服务器还可以。一定有什么不对劲。我决定去看看。我用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或者邮箱删除。