Postfix 通知发送

Postfix 通知发送

我的情况

我正在编写一个使用本地 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

相关内容