![鸽舍筛法和超额配额](https://linux22.com/image/796597/%E9%B8%BD%E8%88%8D%E7%AD%9B%E6%B3%95%E5%92%8C%E8%B6%85%E9%A2%9D%E9%85%8D%E9%A2%9D.png)
遇到以下问题:当用户超出配额时,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)。