我的情况
我正在编写一个使用本地 postfix 向用户发送电子邮件的网站。对于我要发送的任何电子邮件,我需要知道 postfix 是否已成功将其投递(到下一跳)。
我目前所做的
我正确配置了脚本的执行,以防电子邮件被退回。为了实现这一点,我发送电子邮件,使用类似“info+2493@mydomain”作为信封发件人地址,其中 2493 是我邮件的唯一标识符,并为 info@mydomain 配置了一个传输条目,它使用执行我的脚本的临时中继(在 master.cf 中)。很好
我的问题
我怎样才能配置脚本的执行,就像我对成功发送的电子邮件的退回所做的那样?
除了退回和投递之外,还有哪些其他的可能性是我应该关心的?
答案1
要了解邮件递送状态,Postfix 使用 DSN如上所述RFC 3464. 文档指出有 3 种交付状态
- 成功(服务器接受消息)
- 延迟(服务器现在无法传送,但会再试一次)
- 失败(服务器无法传送,退回给发件人)
如果您通过以下方式发送电子邮件sendmail
(例如邮件功能在 PHP 中),默认状态是 postfix 会在出现故障或延迟时通知您。如果您希望在邮件发送成功后收到通知,请-N delay,failure,success
在 sendmail 命令中添加参数。此功能记录在Postfix DSN 支持和发送邮件(1)。
更新
为了区分成功交付和失败,您可以解析附件DSN email
,特别是在Delivery report
部分中。
以下是失败交付的片段
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; example.com
X-Postfix-Queue-ID: 3gPtcL5lvrzDFBC
X-Postfix-Sender: rfc822; [email protected]
Arrival-Date: Fri, 9 May 2014 08:04:50 +0700 (WIT)
Final-Recipient: rfc822; [email protected]
Original-Recipient: rfc822;[email protected]
Action: failed
Status: 5.1.1
Remote-MTA: dns; example.com
Diagnostic-Code: smtp; 550 5.1.1 <[email protected]>: Recipient address
rejected: User unknown in virtual mailbox table
以下是成功交付的片段
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; www.example.com
X-Postfix-Queue-ID: 5936DF75D4
X-Postfix-Sender: rfc822; [email protected]
Arrival-Date: Thu, 8 May 2014 22:58:40 +0700 (WIT)
Final-Recipient: rfc822; [email protected]
Original-Recipient: rfc822;[email protected]
Action: relayed
Status: 2.0.0
Diagnostic-Code: X-Postfix; delivery via dovecot: delivered via dovecot service