注意:本文发布于 2885 天前,文章中的一些内容可能已经过时。
本篇已同步至纸飞机技术博客:一次在 Openshift 上折腾 PHPMailer 的经历
因为 SAE 太坑,所以我还是把纸飞机的微信和办公系统迁移到了 Openshift 上,并使用了百度云加速。问题就出在这里:我知道要修改 SAE 的一些特性,例如 SaeSegment、SaeCounter,但是没想到还漏了一个 SaeMail,于是服务部的小伙伴们结束维修发邮件的时候就提示 500 了。
好吧,那我就改成自己的 Mail 服务呗,到网上下了一个 PHPMailer,然后填好设置,本地测试通过,就推上去了。
$mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = "smtp.nuaa.edu.cn"; $mail->SMTPAuth = true; $mail->Username = "xxx"; $mail->Password = "xxxxxx"; $mail->Port = 25; $mail->From = "[email protected]"; $mail->FromName = "xxxxxx"; $mail->AddAddress($email, 'xxx'); $mail->IsHTML(true); $mail->Subject = "纸飞机电脑服务中心维修记录"; $mail->Body = $message; $mail->Send();
既然我写这篇文章,那就说明肯定没成功……😂
这是 SMTP 的问题,于是我对照着 PHPMailer 的文档,尝试着把$mail->IsSMTP()
改成$mail->IsMail()
,邮件发送是成功了,但是是在垃圾箱里的。
于是如果想正常发送到收件箱的话,只能从 SMTP 入手了。尝试一下调试 SMTP 吧!我加上了一句$mail->SMTPDebug = 2
看一下调试记录,结果是这样的:
2016-05-31 17:08:43 SERVER -> CLIENT: 220 nuaa.edu.cn Anti-spam GT for Coremail System (nuaa[20120426]) 2016-05-31 17:08:43 CLIENT -> SERVER: EHLO my.nuaa.edu.cn 2016-05-31 17:08:43 SERVER -> CLIENT: 250-mail 250-PIPELINING 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 coremail 1Uxr2xKj7kG0xkI17xGrUDI0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFwtne1UCa0xDrUUUUj 250-STARTTLS 250 8BITMIME 2016-05-31 17:08:43 CLIENT -> SERVER: STARTTLS 2016-05-31 17:08:43 SERVER -> CLIENT: 220 Ready to start TLS 2016-05-31 17:08:43 SMTP Error: Could not connect to SMTP host. 2016-05-31 17:08:43 CLIENT -> SERVER: QUIT
就这么被断掉了?好奇怪。
为了验证,我特地连到了纸飞机服务器,并使用nc
来手动连接了 SMTP 服务器。
[rexskz@my ~]$ nc smtp.nuaa.edu.cn 25 220 nuaa.edu.cn Anti-spam GT for Coremail System (nuaa[20120426]) EHLO my.nuaa.edu.cn 250-mail 250-PIPELINING 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-coremail 1Uxr2xKj7kG0xkI17xGrUDI0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFwtne1UCa0xDrUUUUj 250-STARTTLS 250 8BITMIME STARTTLS 220 Ready to start TLS
然后服务器就没反应了,没过多久就显示Ncat: Broken pipe.
……T_T
于是推测smtp.nuaa.edu.cn
不支持 STARTTLS,那就用明文登录呗,反正服务器之间直接通信,被抓包的几率不大。于是我又手动连接了一遍。
[rexskz@my ~]$ nc smtp.nuaa.edu.cn 25 220 nuaa.edu.cn Anti-spam GT for Coremail System (nuaa[20120426]) EHLO my.nuaa.edu.cn 250-mail 250-PIPELINING 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-coremail 1Uxr2xKj7kG0xkI17xGrUDI0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2Ur6v7n_UCa0xDrUUUUj 250-STARTTLS 250 8BITMIME AUTH LOGIN 334 dXNlcm5hbWU6 Base64 之后的用户名 334 UGFzc3dvcmQ6 Base64 之后的密码 235 Authentication successful
认证成功!于是现在的思路就是去掉 PHPMailer 自带的 TLS。对照着文档,我找到了这个:
$mail->SMTPAutoTLS = false;
最终成功了……