Postfix 不会重试发送延期的电子邮件

Postfix 不会重试发送延期的电子邮件

我有一个正在运行的 Postfix 服务器,但有一个问题,那就是发送被推迟的电子邮件根本就不会重试。它们存在于队列中但从未被处理过。如果我手动处理队列(通过 pfqueue 或 postqueue -f),电子邮件就会被正确传递。

该时间期间 mail.log 的输出如下所示:

Oct  6 12:19:37 example postfix/pickup[19048]: 8031D405F5: uid=1000 from=<[email protected]>
Oct  6 12:19:37 example postfix/cleanup[19049]: 8031D405F5: message-id=<[email protected]>
Oct  6 12:19:37 example opendkim[1433]: 8031D405F5: DKIM-Signature field added (s=mail, d=example.de)
Oct  6 12:19:37 example postfix/qmgr[1565]: 8031D405F5: from=<[email protected]>, size=984, nrcpt=1 (queue active)
Oct  6 12:19:38 example postfix/smtp[19051]: 8031D405F5: to=<[email protected]>, relay=mx.xxx.net[xxx.xxx.xxx.xxx]:25, delay=1.2, delays=0.05/0.01/0.41/0.7, dsn=4.7.1, status=deferred (host mx.xxx.net[xxx.xxx.xxx.xxx] said: 451 4.7.1 Greylisted - try again in 300 seconds (in reply to RCPT TO command))

我正在运行以下配置(来自 postconf -n 的输出):

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
bounce_queue_lifetime = 2h
inet_interfaces = loopback-only
inet_protocols = ipv4
mailbox_size_limit = 0
maximal_backoff_time = 15m
maximal_queue_lifetime = 2h
milter_default_action = accept
milter_protocol = 2
minimal_backoff_time = 5m
mydestination = example.com, localhost.example.com
myhostname = example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
non_smtpd_milters = inet:localhost:12301
queue_run_delay = 5m
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_milters = inet:localhost:12301
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/letsencrypt/live/www.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/www.example.com/privkey.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes

如何让 Postfix 自动重试队列?

谢谢!

答案1

目标邮件服务器的灰名单可能会阻止电子邮件及时送达(您的 maximal_queue_lifetime 设置为 2h)。我会将以下值恢复为合理的默认值,然后从那里进行调整。

从:http://www.postfix.org/TUNING_README.html

queue_run_delay=300s (默认值:300 秒;Postfix 2.4 之前版本:1000 秒)- 队列管理器扫描队列以查找延期邮件的频率。

minimal_backoff_time=300s (默认值:300 秒;Postfix 2.4 之前版本:1000 秒)- 消息不会被查看的最短时间,以及远离“死亡”目的地的最短时间。

maximal_backoff_time=4000s (默认值:4000 秒)- 邮件传递失败后无法被查看的最长时间。

maximal_queue_lifetime=5d (默认值:5 天)- 邮件在队列中停留多长时间后被退回为无法投递的邮件。指定 0 表示在第一次投递尝试失败后应立即退回的邮件。

bounce_queue_lifetime=5d (默认值:5 天,Postfix 2.1 及更高版本可用)- MAILER-DAEMON 邮件在队列中停留多长时间后才被视为无法投递。指定 0 表示邮件仅应尝试一次。

我希望这有帮助。

答案2

Postfix 日志中有以下信息:

Oct  6 13:57:51 xxx postfix[47965]: Postfix is running with backwards-compatible default settings
Oct  6 13:57:51 xxx postfix[47965]: See http://www.postfix.org/COMPATIBILITY_README.html for details
Oct  6 13:57:51 xxx postfix[47965]: To disable backwards compatibility use "postconf compatibility_level=2" and "postfix reload"

我从未多想,但我决定将其添加compatibility_level=2到我的配置文件中。从那时起,队列管理器就正常工作了。

由于这是我所做的唯一更改,因此我很确定这是导致问题的原因。在此之前,Postfix 和服务器已重启多次,因此简单的电源循环不是原因。

也许这对某些人有帮助。

相关内容