我有一个只发送配置了允许从以下位置发送的 postfix MTA@example.com
当发生退回时,我想在脚本中处理它。
我按照这个答案给出的步骤进行操作:https://serverfault.com/a/735721/444076
我的脚本被正确调用,但发件人地址仍然收到退回的电子邮件。我该如何防止这种情况发生?
主配置文件
mydestination = bounce.example.com, localhost
# BOUNCE CONFIG
notify_classes = bounce
bounce_notice_recipient = [email protected]
transport_maps = hash:/etc/postfix/transport_maps
bounce_size_limit = 1
运输地图
# when you make changes to this file, run:
# sudo postmap /etc/postfix/transport_maps
[email protected] bulkbounce:
主配置文件
bulkbounce unix - n n - - pipe
flags=FRq user=nouser argv=/path/to/bouncescript.sh
但是发送这样的邮件(有效发件人,无效的收件人):
FROM: [email protected]
TO: [email protected]
SUBJECT: ...
...
导致我的脚本被调用(好)并且[电子邮件保护]收到带有退回邮件的电子邮件(不需要的)。
我该如何禁用它?或者我遗漏了什么。
示例日志:
Nov 16 17:27:32 dev postfix/smtpd[6654]: connect from localhost[::1]
Nov 16 17:27:32 dev postfix/smtpd[6654]: 486FED9F98: client=localhost[::1]
Nov 16 17:27:32 dev postfix/cleanup[6658]: 486FED9F98: message-id=<[email protected]>
Nov 16 17:27:32 dev postfix/qmgr[6652]: 486FED9F98: from=<someuser@example>, size=544, nrcpt=1 (queue active)
Nov 16 17:27:32 dev postfix/smtpd[6654]: disconnect from localhost[::1]
Nov 16 17:28:13 dev postfix/smtp[6659]: 486FED9F98: to=<[email protected]>, relay=tribulant.com[23.22.38.89]:25, delay=41, delays=0.05/0.02/21/20, dsn=5.0.0, status=bounced (host tribulant.com[23.22.38.89] said: 550 No such person at this address. (in reply to RCPT TO command))
Nov 16 17:28:13 dev postfix/cleanup[6658]: 7604CD9F9D: message-id=<[email protected]>
Nov 16 17:28:13 dev postfix/qmgr[6652]: 7604CD9F9D: from=<>, size=2984, nrcpt=1 (queue active)
Nov 16 17:28:13 dev postfix/bounce[6693]: 486FED9F98: sender non-delivery notification: 7604CD9F9D
Nov 16 17:28:13 dev postfix/cleanup[6658]: 76DAED9F9E: message-id=<[email protected]>
Nov 16 17:28:13 dev postfix/qmgr[6652]: 76DAED9F9E: from=<[email protected]>, size=2599, nrcpt=1 (queue active)
Nov 16 17:28:13 dev postfix/bounce[6693]: 486FED9F98: postmaster non-delivery notification: 76DAED9F9E
Nov 16 17:28:13 dev postfix/qmgr[6652]: 486FED9F98: removed
Nov 16 17:28:13 dev postfix/smtp[6659]: 7604CD9F9D: to=<someuser@example>, relay=mx.mailprotect.be[178.208.39.141]:25, delay=0.08, delays=0/0/0.05/0.03, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as C0B5E4401F4)
Nov 16 17:28:13 dev postfix/qmgr[6652]: 7604CD9F9D: removed
Nov 16 17:28:13 dev postfix/pipe[6694]: 76DAED9F9E: to=<[email protected]>, relay=bulkbounce, delay=0.16, delays=0/0.01/0/0.15, dsn=2.0.0, status=sent (delivered via bulkbounce service)
Nov 16 17:28:13 dev postfix/qmgr[6652]: 76DAED9F9E: removed
fqdn:app.example.com
答案1
现在我明白了发生了什么,答案就显而易见了。
按照 RFC,MTA 应该始终向发送方(如果设置,则为 FROM 或返回路径)发送退回消息。
添加notify_classes不会改变此行为,而是在其基础上添加行为。(因此发送了第二封邮件)
为了实现我想要的效果,即只调用脚本,我删除了notify_classes和bounce_notice_recipient。另外,我更改了我们的应用程序,使其始终添加一个“Return-Path”标头,其中包含[电子邮件保护]
当发生退回时,MTA 会向 FROM 或返回路径(如果已设置)发送退回邮件(现在为[电子邮件保护])。由于这封电子邮件已映射到 transport_maps 中,因此它会通过管道传输到脚本,并且实际上不会发送电子邮件。太好了
答案2
由于它只发送服务器。我实际上会将所有电子邮件路由到空过滤器并丢弃它们,并使用notify_classes = bounce
+ 实现其原始预期用途。bounce_notice_recipient = [email protected]
Return-Path
这将节省您在应用程序中添加标题的额外精力。