我正在使用 SSH 管道将一些电子邮件发送到另一台服务器进行特殊处理,这是我在 master.cf 中配置的。
foobar unix - n n - - pipe
flags=RF user=foobar:foobar argv=/usr/bin/ssh -T foobar@foobar /usr/local/bin/foobar ${recipient}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,如果此服务器不可用(或由于某些其他原因 SSH 连接失败),则整个交付失败并且发件人收到有关该消息的消息。我想要的是,如果失败,则将电子邮件放回队列以供稍后重试。并且只有在几天内未进行此交付时,才会通知发件人。如何以这种方式配置 Postfix?
小智 6
添加-o soft_bounce=yes
到 中的定义master.cf
。
例子:
foobar unix - n n - - pipe
-o soft_bounce=yes
flags=RF user=foobar:foobar argv=/usr/bin/ssh -T foobar@foobar /usr/local/bin/foobar ${recipient}
Run Code Online (Sandbox Code Playgroud)
这将使邮件永远保留在延迟队列中(或直到机器恢复运行并 postfix 重试它),并且在几天后不会退回,但它是我能找到的最好的(甚至隐藏得很好)。
小智 6
如果pipe
传递到的命令返回退出代码 75,则这会导致传递被推迟而不是被退回。或者,如果第一行输出似乎具有优先的扩展 SMTP 状态(例如“4.2.0”)。
我会将 ssh 命令包装在 shell 脚本或检测到故障并将其转换为正确的输出/退出状态的东西中。
这允许传递程序将消息标记为无法传递,而不是总是重试。并保留该soft_bounce
选项作为调试安全网。
(我很感激你已经有了答案,但我认为这可能对其他发现这个问题的人有用)
归档时间: |
|
查看次数: |
3819 次 |
最近记录: |