我对一些服务器内容还不熟悉,需要一些帮助来理解 /var/log/maillog 文件的内容。
我为正在运行的电子邮件通讯发送了 200 封电子邮件。在“maillog”文件中,我显示了一些电子邮件,其中显示“status=sent”、“status=deferred”、“status=Accepted for delivery”、“status=sent (Message Qued for delivery)”、“status=sent (Message Accepted)。
这些状态究竟是什么意思?换句话说,我认为“消息已接受”的消息意味着收件人确实阅读了电子邮件,对吗?但是,一封刚刚“已发送”或“已排队等待递送”的电子邮件实际上还没有到达收件人手中?
我如何才能找到解释这些状态的方法,并了解我的电子邮件是否已真正阅读,或者是否在收件人的邮件服务器上等待他们下载和阅读等。有没有什么地方可以为我解释这些?我想知道我的电子邮件程序是否真的在发送电子邮件,以及在发出的电子邮件中,哪些真正送到了收件人手中。
谢谢您的任何提示或建议。
答案1
状态值本身并不像紧随其后的括号中的数据那么有价值,后者可以更好地描述正在发生的事情。
“消息排队等待传送” - 这意味着您的服务器和目标服务器之间的交易尚未针对该特定消息进行,这通常意味着只是发送了该消息,并且您的 SMTP 服务器确认了它的存在
“消息已接受” - 这意味着目标服务器确认已收到该消息。(并不表示已读)
“退回”——这通常意味着出现了问题——要么是目标电子邮件服务器拒绝了该电子邮件,因为电子邮件地址不存在,或者它可能因为在 RBL 上而被拒绝。这也意味着电子邮件将不会被发送,也不会被服务器处理。又称:邮件已失效。
“延迟” - 这意味着发生了一些临时事件导致邮件无法送达,但服务器(您的服务器)尚未放弃,稍后会再次尝试。当目标 SMTP 服务器使用一种称为“灰名单”的反垃圾邮件技术时,这种情况也很常见。
其他事项,这是我的 mail.log 中的一个日志行示例:
postfix/qmgr[32131]: 3858792A80: from=<[email protected]>, size=757, nrcpt=1 (queue active)
postfix/smtp[32135]: 3858792A80: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[74.125.91.27]:25], delay=8, delays=8/0.01/0.4/1.5, dsn=2.0.0, status=sent (250 2.0.0 OK
1307169606 6si4629303qcd.120)
中继=gmail-smtp-in.l.google.com[74.125.91.27]:25] =“收件人”电子邮件地址的目标 SMTP 服务器
延迟=0.08/0.01/0.4/1.5=
- 0.08 秒 = 从消息到达到最后一个活动队列条目的时间
- 0.01 秒 = 从最后一个活动队列条目到连接建立的时间
- 0.4s = 协商连接的时间(EHLO 等)
- 1.5 秒 = 传输整个消息所用的时间
一个很好的学习方法是简单地跟踪您的邮件日志并以各种方式发送电子邮件 - 观察当您向坏账户发送电子邮件时会发生什么;或者发送到使用灰名单的服务器。阻止出站端口并发送一个。
答案2
Rovangju 的回答在一些重要部分是不正确的。
已发送状态条目表示远程服务器已接受该消息。其他任何状态都表示该消息仍在您的服务器上或不会发送到任何地方。已延迟表示似乎发生了临时错误,已退回表示该消息不会发送到任何地方,但会向原始发件人发送通知或将向原始发件人发送通知。还有一个额外的状态为保留,但只有在您已告诉您的 postfix 实例采取保留操作并且需要更改配置时,您才会看到该状态。
状态条目括号内的注释是远程服务器在发送电子邮件时给出的答复。它对于查看邮件被拒绝、延迟或保留的原因很有用。如果已发送,则除了好奇之外没有任何价值。嗯,大多数情况下。在极少数情况下,它对接受来自您服务器的消息的服务器的管理员有用,或者在日志中继邮件跟踪的特殊情况下有用。除此之外,它们只是 status=sent 条目中的信息。
远程服务器是否接受该消息与该消息是否被阅读无关。那将是一个“已读回执”,实际上是一封不同的电子邮件,返回给发件人以通知他们。并且只有当处理向用户显示邮件的远程服务器(可能不是您将邮件发送到的服务器)能够并为此进行配置,并且读者使用的客户端允许时,才会发生这种情况。
在运行 Postfix 邮件中继的多年时间里,我从未见过“消息已接受”的状态。因此,我怀疑这是一条入站消息,并且该消息已被接受进行本地传送,而不是中继到另一个目的地。我期望 Postfix 中继的状态为“已发送”(消息已接受传送)。和上面一样,这将是来自远程服务器的消息。如果您的 Postfix 系统没有您要发送到的本地邮箱,我会感到担忧。
原因是 Postfix 状态消息本身是一个单词,而不是句子。也许您输入错误或读错了?如果不是,如果您可以粘贴实际行,我可能会提供进一步的帮助。
状态行由 postfix 中的 stmp 客户端记录,postfix 的消息接受由 smtpd 完成。您还可以通过在日志条目中查找 postfix/smtp 或 postfix/smtpd 轻松分辨出差异。前者是 postfix 发送消息,后者是 postfix 接受消息。
状态消息在重要性方面具有更高的优先级,因为它指示了状态。其余的仅仅是关于状态的解释或附加信息。如果您只想知道给定交易的状态,那么 status= 后面的单词就是您需要知道的全部内容。但请注意,如果特定电子邮件的收件人发往不同的目的地,例如一个收件人在 yahoo,另一个收件人在 gmail,那么每次投递尝试都会有一个状态条目。此外,延迟的消息将至少有两个状态条目 - 初始延迟和最终结果。这可能会导致数十次投递尝试。
从这个意义上讲,重要的是要记住日志中的状态条目只是告诉您该交易的结果。
如果您要操作 postfix 中继,访问 postfix.org 和 postfix 资源(如邮件列表和/或 Postfix 之书)将是一个明智的想法。当您尝试发送批量电子邮件时,您可能会遇到一些容易陷入的陷阱。虽然密切关注您的日志是一个好主意,但最好的学习方法是利用 postfix 社区以及日志分析社区。了解 postfix 的工作原理将为您省去许多有关日志的问题。这对您来说比仅仅观察正在发生的事情更有用,因为您将能够查看日志并知道哪里出了问题或知道从哪里开始。而且会出错。
干杯