【问题标题】:Exim - A lot of frozen messages without senderExim - 很多没有发件人的冻结邮件
【发布时间】:2013-06-18 09:45:55
【问题描述】:

我是 Exim 的新手,我将它用作智能主机(接收来自用户的电子邮件并将其发送到我的 ISP)。

系统运行正常,但我遇到了一些冻结消息的问题。我有时会查看队列,有一些冻结的消息没有发件人,所以 Exim 无法发送它们,因为如果没有发件人,它就无法通过 ISP 进行身份验证。

我可以从哪里开始调试?

谢谢你。

【问题讨论】:

    标签: exim


    【解决方案1】:

    这些是退回邮件。有些东西正在通过您的邮件服务器发送邮件,但收件人不接受它,因此您的系统会生成退回邮件。这些退回邮件也被拒绝,因此它们被 exim MTA “冻结”。您需要弄清楚这些消息最初来自哪里,并阻止那些未经授权的消息的流动。

    exigrep 1UorWC-0002Nz-Mz /var/log/exim/main.log(或任何你的路径)

    这将在邮件日志中找到退回邮件。我以邮件队列中的一条冻结消息为例(1UosOk-0000ej-KG):

    # exigrep 1UosOk-0000ej-KG /var/log/exim/main.log
    +++ 1UosOk-0000ej-KG has not completed +++
    2013-06-18 09:40:22 1UosOk-0000ej-KG <= <> R=1UosOf-0000bX-BV U=www P=local S=894 
    2013-06-18 09:40:24 1UosOk-0000ej-KG ** origsender@example.biz P=<> R=dnslookup_forwarder 
      T=remote_smtp_forwarder: SMTP error from remote mail server after RCPT TO:<origsender@example.biz>: 
      host mail.example.biz [80.76.197.72]: 554 5.7.1 <origsender@example.biz>: Relay access denied
    2013-06-18 09:40:24 1UosOk-0000ej-KG Frozen (delivery error message)
    

    第一行表示退回消息 1UosOk-0000ej-KG 是为响应消息 1UosOf-0000bX-B 而创建的(这就是THAT 消息 id 以找出这条消息的实际来源。就我而言,这不是退回邮件,而是客户的自动回复:

    # exigrep 1UosOf-0000bX-BV /var/log/exim/main.log
    2013-06-18 09:40:18 1UosOf-0000bX-BV H=example.biz [62.189.29.157] Warning: SPF PASS (pass) to m.ivenue.com: 
      domain of example.biz designates 62.189.29.157 as permitted sender
    2013-06-18 09:40:22 1UosOf-0000bX-BV <= origsender@example.biz H=example.biz [62.189.29.157] P=esmtp S=17624
    2013-06-18 09:40:22 1UosOf-0000bX-BV => /netapp3/mail/maildirs/b/o/y/boyexample.com/sarah/Maildir/ 
      (sarah@boyexample.com) <sarah@boyexample.com> P=<origsender@example.biz> R=virtual_user T=address_directory
    2013-06-18 09:40:22 1UosOf-0000bX-BV => sarah <sarah@boyexample.com> P=<origsender@example.biz> 
      R=autoresponder_always T=autoresponder_always_t
    2013-06-18 09:40:22 1UosOf-0000bX-BV Completed
    

    一旦您发现通过您的系统发送这些消息所使用的进程,您可以采取措施阻止它们,假设它们一开始就不是有效的消息。您采取的步骤很大程度上取决于您的发现。

    通常您不想尝试重新发送这些冻结的消息。但是,如果由于某些临时网络或配置错误而导致消息被冻结,并且您想让 exim 重新发送它们,那么您需要生成一个冻结消息列表并告诉 Exim 发送它们。最简单的方法是使用 exiqgrep 程序:

    exiqgrep -z -i | xargs -n 1 exim -M
    

    【讨论】:

    • 嗨,今天遇到了。很好解释。那么如何重新发送这些冻结的消息呢?通常会采取哪些措施来防止它们发生?非常感谢!
    • 添加了一段解释如何重新发送的段落。
    【解决方案2】:

    冻结的邮件在 exim 队列中没有用。您可以删除所有这些以减少 exim 队列列表。

    以下命令将删除所有冻结的邮件:

    exim -bpr | grep frozen | awk {'print $3'} | xargs exim -Mrm

    exiqgrep -z -i | xargs exim -Mrm

    如果您想删除超过特定时间(例如 24 小时)的冻结邮件:

    exiqgrep -zi -o 86400 | xargs exim -Mrm

    86400 表示以秒为单位的 24 小时。这可以相应地改变。

    【讨论】:

    • 这些都是关于队列管理的好建议。恕我直言,exiqgrep 命令总是比 exim -bpr(又名“mailq”命令)的输出更好用。它将始终产生一致且受控的输出。
    【解决方案3】:

    exim 可以通过将配置选项 ignore_bounce_errors_after 设置为合适的值来自动清除冻结的反弹,例如

    ignore_bounce_errors_after = 12h
    

    将在 12 小时后自动删除这些退回错误。

    【讨论】:

    • 您还应该添加timeout_frozen_after = 1d 以取消(删除)超过一天的冻结消息。
    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2017-06-07
    • 2013-08-11
    • 2013-07-22
    • 2014-05-10
    相关资源
    最近更新 更多