有没有办法配置 postfix 处理电子邮件的延迟?我的目标是从 MUA 接收邮件并将其传输到邮箱或其他 MTA 之间有 5 分钟的延迟。
谢谢。
答案1
您可以通过在 main.cf 的 smtpd 部分中指定新的主传输来轻松完成此操作:
smtpd_recipient_restrictions = check_policy_service unix:private/sleep_delay, permit_mynetworks, reject_unauth_destination
然后在master.cf中:
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
sleep_delay unix - n n - - spawn
user=nobody argv=/usr/bin/perl /path/to/your_script
在 /path/to/your_script 中,只需让它 sleep(X) 和 exit(0)。您可以使用此脚本/配置作为如何实现与 postfix 的外部脚本交互的示例:
答案2
此功能应该在 MUA 中实现。如果您有网络邮件,则可以安装实现此功能的插件。Thunderbird 有一个扩展。如果用户发送电子邮件后后来改变主意,那么她可以自行取消。我认为没有其他办法。如果一个人不知道所有答案,对服务器进行恶意攻击只会让事情变得更糟。
答案3
有一种方法,但是它太愚蠢了,所以我只提供步骤。
将其放入您的收件人限制中:recipient_restrictions = ..., static:HOLD, ...
然后您将获得一个输出,postqueue -p
其中保留队列中的所有邮件都标有!
(感叹号)和到达日期。使用 cron-job 和脚本来解析和检查此输出。如果邮件在队列中停留的时间超过 x 分钟,您可以通过发出将其重新注入 Postfix 传递过程postsuper -H [queue_id]
。[queue_id] 位于 的第一列postqueue -p
。
请不要要求脚本自动执行此操作!