R·ex / Zeng


音游狗、安全狗、攻城狮、业余设计师、段子手、苦学日语的少年。

一次在 Openshift 上折腾 PHPMailer 的经历

注意:本文发布于 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;

最终成功了……

Disqus 加载中……如未能加载,请将 disqus.com 和 disquscdn.com 加入白名单。

这是我们共同度过的

第 3077 天