我想在 postfix 成功发送邮件(本地或远程)后运行一个程序。我想将邮件头传递给程序,如果可能的话,还要传递目标 IP 或地址(不包括垃圾邮件过滤器传递)。
我只是有一个想法:通过独特的传输程序处理传递状态通知,但我更喜欢上述方法。
我的目标是记录电子邮件的生命周期(事件):它来了,它出去了(发件人、收件人、主题、日期时间、邮件 ID、邮件状态:退回、已发送)。我只需要外发邮件的状态,因为收件和退回程序正在运行。
是否有可能触发程序(类似于传输管道/生成)或 DSN“欺骗”停留?
提前感谢任何回复!
答案1
这仅用于记录消息头。
默认情况下,postix 已经记录了大部分此类信息,尽管不是一行。但是,它不会记录主题或消息 ID。我们可以通过使用header_checks 5
。
注意:对于所有邮件(而不仅仅是外发邮件),请使用header_checks
代替smtp_header_checks
。
#main.cf
smtp_header_checks = regexp:$config_directory/header-logging.cf
#header-logging.cf
/^subject:/ INFO
/^Subject:/ INFO
/^Message-Id:/ INFO
这些消息将被记录到系统日志中指定的设施syslog_facility
(default: mail)
。
Apr 9 15:37:25 mta-msa postfix/smtps/smtpd[14688]: DA75A231C600: client=192-0-2-5.example.com[192.0.2.5], sasl_method=LOGIN, sasl_username=foo
Apr 9 15:37:25 mta-msa postfix/cleanup[14686]: DA75A231C600: message-id=<[email protected]>
Apr 9 15:37:25 mta-msa postfix/qmgr[14653]: DA75A231C600: from=<[email protected]>, size=6495, nrcpt=1 (queue active)
Apr 9 15:37:26 mta-msa postfix/smtp[14675]: DA75A231C600: info: header Subject: RE: please email as you leave
Apr 9 15:37:26 mta-msa postfix/smtp[14675]: DA75A231C600: info: header Message-ID: <[email protected]>
Apr 9 15:37:26 mta-msa postfix/smtp[14675]: DA75A231C600: to=<[email protected]>, relay=mx.example.org[198.51.100.0]:25, delay=0.65, relays=0.01/0/0.33/0.31, dsn=2.0.0, status=sent (250 2.0.0 1tnx2ya0mh-1 Message accepted for delivery)
Apr 9 15:37:26 mta-msa postfix/qmgr[14653]: DA75A231C600: removed
答案2
你可以用插入到后缀处理管道中的某些东西来做到这一点就像 amavisd-new 那样。
简而言之,postfix 配置为在 postfix 中有一项新服务master.conf
。该服务将是一个小程序,它保存消息的副本,然后将消息重新插入 postfix。