旨在完成:Linux服务器在触发某条件时可以自动发送邮件至管理员,已达到提醒的目的。
于是花了些时间在macOS上使用PHPMailer类完成发送邮件的功能(主要是写CSS样式,强迫症TvT),然后开开心心的将文件打包上传到服务器。
emmm,先测试一下(嘿,运行完成)
打开邮箱,咋没有呢(漫长的等待....)
emmm,还是没有,唉,又到了找问题的时候了,可是也没报错呀QAQ
搜索了一下,发现PHPMailer自己保存了错误信息(ErrorInfo),于是将错误信息输出
if (!$mail->Send()) {
echo $mail->ErrorInfo;
return FALSE;
} else {
return TRUE;
}
保存退出,运行...
果然输出了错误信息:
SMTP connect() failed.
压根就没连上SMTP服务器,这可咋整?
然后又是一顿搜索,发现PHPMailer是可以调试的
// PHPMailer调试
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
将其加入到代码中,运行,输出:
2018-04-06 11:03:05 Connection: opening to smtp.qq.com:25, timeout=300, options=array ()
2018-04-06 11:03:19 SMTP ERROR: Failed to connect to server: Connection timed out (110)
2018-04-06 11:03:19 SMTP connect() failed.
带着错误继续搜索,发现有人通过禁用IPv6解决这个问题,于是我也尝试着禁用了IPv6,可是效果却并不好,错误依然存在,显然这种方法并不适合我的Linux
随后又分别检查了OpenSSL扩展是否开启以及相关函数是否被禁用,但是一切正常
最后在百度搜索 SMTP ERROR: Failed to connect to server: Connection timed out (110),在Stack Overflow上看到PHPMailer的相关配置信息(传送门),于是开始调试自己代码的配置
当我添加上以下配置信息后
$mail->Port = 587;
运行发现,没有错误信息,然后检查接收的邮箱也成功收到了邮件
需要注意的是:ssl对应端口465,tls对应端口587
在mac系统下,我是没有配置Port这个选项,但是也可以成功发送邮件,具体原因就不得而知了