使用phpmailer当我从我的网络服务器发送电子邮件时,我总是收到 110 超时和“无法连接到主机”的错误提示。
身份验证详细信息是正确的,并且它们在我的另一台服务器上有效(登录、密码、端口等以及在 465 上为 SSL 连接设置的 gmail 帐户),但它在我的新服务器上失败了。
防火墙: 我在 INPUT 上允许相关/已建立、端口 80 和 SSH 端口,然后在 OUTPUT 上允许此端口:
7906 474K DROP tcp -- any any anywhere anywhere tcp dpt:smtp
0 0 ACCEPT tcp -- any any localhost.localdomain yw-in-f109.1e100.net tcp dpt:submission
0 0 ACCEPT tcp -- any any localhost.localdomain gx-in-f109.1e100.net tcp dpt:ssmtp
0 0 DROP tcp -- any any anywhere anywhere tcp dpt:submission
9 540 DROP tcp -- any any anywhere anywhere tcp dpt:ssmtp
此输出链在我的其他服务器上有效,禁用它也无法传递邮件。
网络服务器: Varnish (80) > Nginx (8088) > Drupal 7 > PHP5-FPM > APC > MySQL 除外发电子邮件外,所有功能均运行正常。
还有什么呢?
我理解 phpmailer 不需要本地 MTA 或 procmail(这有点道理 - 我不希望在我的 Web 服务器上使用功能齐全的 MTA 带来安全或管理开销)。我错了吗?我也需要 MTA 吗?
哪些本地端口和程序用于通过 SSL 进行身份验证以及使用 phpmailer 路由邮件?
非常感谢任何想法 - 已经在这些无稽之谈上浪费了一天的时间!
答案1
如果远程 smtp 不可用,则最好使用本地 mta 对消息进行排队。
限制传出流量并不常见。安全优势很小:如果攻击者拥有您的本地计算机,他无论如何都可以关闭防火墙。即使您可以很好地控制您的应用程序,我也不会这么做,因为您永远不知道 gmail 使用哪些 IP 进行提交。它们可以在没有通知的情况下更改。所以我的建议是至少向所有主机开放提交/ssmtp。
答案2
我允许相关/已建立、端口 80 和 INPUT 上的 SSH 端口,然后允许 OUTPUT 上的这个端口
否 - 端口 80 用于网络流量 - 与网络流量无关。
哪些本地端口和程序用于通过 SSL 进行身份验证以及使用 phpmailer 路由邮件?
客户端端口是随机选择的。
你的日志表明发生了什么?
如果不知道您的 phpmailer 设置是什么(或者您的 PHP 是否支持 SSL),就无法说出这里到底发生了什么。
即使您已正确配置您的机器和代码,您知道这个盒子和 Gmail 服务器之间有什么吗?
您是否已正确检查其解析名称?您是否可以从本地网络跟踪到 smtp.gmail.com 的大致方向?(如果 ping 成功,则意味着没有路由问题 - 但如果失败,则并不一定意味着路由已中断)。
尝试启动与 smtp.gmail.com 的 SSL 连接 stunnel,并观察通过 telnet 连接时会发生什么。