鸽舍筛法和超额配额

鸽舍筛法和超额配额

遇到以下问题:当用户超出配额时,exim 日志中会出现一条错误消息:

$2012-11-06 14:22:38 1TVfxZ-00086u-U1 == username@domain R=localuser T=dovecot_delivery defer (0): Child process of dovecot_delivery transport returned 75 (could mean temporary error) from command: /usr/libexec/dovecot/dovecot-lda

此外,邮件日志中还有一条错误消息:

Nov  6 13:33:32 mx2 dovecot: lda(username@domain): Error: sieve: msgid=<[email protected]>: failed to store into mailbox 'INBOX': Quota exceeded (mailbox for user is full)
Nov  6 13:33:32 mx2 dovecot: lda(username@domain): Error: sieve: script /etc/dovecot/sieve/default.sieve failed with unsuccessful implicit keep

进出口运输:

dovecot_delivery:
   driver = pipe
   command = /usr/libexec/dovecot/dovecot-lda -d $local_part@$domain -f $sender_address
   message_prefix =
   message_suffix =
   delivery_date_add
   envelope_to_add
   log_output
   user = vmail
   temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78

那么,由于配额问题,sieve 无法存储电子邮件,但为什么它没有在 exim 日志中显示正确的错误?如何修复?

没有筛选插件:

Nov  6 15:41:00 mx2 dovecot: lda(username@domain): msgid=<[email protected]>: save failed to INBOX: Quota exceeded (mailbox for user is full)

提前致谢!

答案1

作为 MTA,exim 已收到电子邮件,并将其交给 dovecot(作为 MDA)进行本地处理和投递。Dovecot 知道配额,但当用户超过配额时,无法投递电子邮件,并记录此情况。它还会让 exim 知道投递失败,以便 exim 可以采取正确的措施,并且 exim 会记录投递过程中出现错误(可能是暂时错误)。希望该电子邮件已被保留在队列中或退回给发件人。

您没有说明您希望在日志中看到什么,但我假设您上面看到的内容与您的期望不符。问题是,根据谁负责什么,这些日志完全合理,因此您可能需要修改您的期望。

编辑:“邮件仍在队列中,将被投递”?那么日志是正确的。发件人还不应该收到投递失败的通知,因为 MTA 尚未决定放弃此交易。一个行为良好的 MTA 会在合理的时间后向发件人发送警告 - sendmail 默认等待四个小时 - 告知收件人尚未收到邮件然而但 MTA 会继续尝试。我不知道您的 exim 是否这样做过,您可以尝试询问发件人,或检查您的邮件日志。

(简要词汇表:MTA = 邮件传输代理,例如 exim 或 sendmail;MDA = 邮件传递代理,通常是 procmail,但在这里显然是 dovecot 的 lda)。

相关内容