我有一封由 CMS 生成的电子邮件,该电子邮件发送给了位于不同主机上的两个人。位于主机 A 上的人总是能收到该电子邮件。位于主机 B 上的第二个人则从来都收不到。
CMS 位于主机 A 的服务器上。两个人可以毫无问题地互相发送和接收电子邮件。他检查了垃圾邮件过滤器,没有发现垃圾邮件。我测试了将电子邮件发送到其他两个主机,没有任何问题。
存在“发件人”字段为空的问题,但我已经修复了这个问题,但他仍然没有收到电子邮件。
开始追查为什么主机 B 上的人从未收到 CMS 生成的电子邮件的最佳方法是什么?
答案1
电子邮件被阻止或拒绝的原因有很多。但是电子邮件的设计方式是不应该消失的。它应该被发送到邮箱、队列中或退回给发件人。主机 A 和主机 B 的 MTA 日志都应显示尝试的发送和尝试的结果。不过,我假设您可能无法访问主机 b 的 MTA 日志。因此,您需要弄清楚如何从您这边排除故障。
不过,Web 应用程序可能有点棘手,因为其中一些应用程序使用简单的 smtp 应用程序或库发送电子邮件,这些应用程序或库会盲目地尝试以尽力而为的方式发送电子邮件。这些应用程序并不总是有队列来处理交付问题。像灰名单这样简单的事情都可能导致交付失败。
最坏的情况是,您可以进行数据包捕获以查看主机 A 和主机 B 之间的对话是什么样的。SMTP 以明文发送,因此 WireShark 可以轻松读取服务器之间的交换。
如果您有更多关于 CMS 如何发送电子邮件以及它使用的 MTA/smtp 应用程序的信息,有人可能会向您指出您应该查看的日志文件。但在 Linux 上,/var/log/mail.log 是一个不错的起点。
答案2
除非您自己编写了需要调试的 MTA,否则您不会从数据包捕获中了解到任何东西。
问题很可能与下游主机有关。您可以访问哪些日志?尝试查看 CMS 系统上的 MTA 的邮件日志以及您可以访问的任何用于 SMTP 中继的辅助 MTA 系统。您是否获得了将邮件传递到远程主机 B 的 250 OK 状态?如果是,则表示您已成功传递了邮件。如果没有,我们需要有关日志中错误的详细信息,以便为您提供更多信息。
问题可能是下一跳不喜欢您的电子邮件。它可能有错误的标头、混乱的 MIME 编码等,这些都会触发拒绝而不退回,因为如果电子邮件不遵循电子邮件格式的相关 RFC,则认为它可能是恶意的。
如果你是如果您收到“250 OK Sent”类型的状态,您唯一能做的就是让主机 B 上的客户与他们的服务提供商、ISP 或 IT 部门联系,询问他们的电子邮件发生了什么情况以及原因。只有远程站点的日志才能说明他们何时没有将电子邮件退回给您。
答案3
您是通过电子邮件服务器还是仅通过 SMTP 服务发送邮件?当从应用程序(如 CMS)发送电子邮件时,通常选择发送电子邮件的方式是
- 网络上的电子邮件服务器(Exchange、其他)
- SMTP 服务(IIS SMTP、其他)
问题就在这里。如果应用程序(您的 CMS)与电子邮件服务器位于同一网络中,那么这是首选,因为电子邮件服务器是该域的指定邮局。另一方面,如果应用程序无法通过邮件服务器中继电子邮件,并且使用 SMTP 服务,则请注意以下事项
如果 SMTP 将直接发送给外部用户,那么您需要确保 IP(公共)已从所有黑名单中清除,确保您已为其他邮件服务器的反向 DNS 设置正确的 PTR 记录,并且关闭中继。
就您而言,如果主机 A 上的人员与 CMS 位于同一网络上,那么他/她将收到邮件。如果主机 B 位于单独的网络上,则主机 B 邮件服务器可能正在进行反向查找,无法确定 SMTP 是否是合法邮件服务器。您还需要进行正确的 MX 设置。
如果两个用户都在同一个网络上,那么发件人(来自地址例如[电子邮件保护]) 不允许发送给该用户。您不能要求您的电子邮件管理员对电子邮件进行跟踪吗?(如果您是从邮件服务器发送的。