我有几个运行 LAMP 堆栈的生产服务器。它们每个都有一个本地 Postfix 服务器,用于捕获来自系统和 PHP 的所有邮件,并通过智能主机(发送网格SMTP 服务)。
我想为发送到智能主机的每条外发消息添加自定义标头。这允许我在 SendGrid 中过滤每个服务器的统计信息。例如:
X-SMTPAPI: {"category": "www1"}
Postfix 文档提到在 Postfix“访问”表中使用 PREPEND 操作。因此,我将以下行添加到/etc/postfix/access
:
PREPEND X-SMTPAPI: {"category": "www1"}
并access
使用 postmap 对文件进行哈希处理。
但是,我不知道如何使用地图。类似下面的方法不起作用:
smtp_client_restrictions = check_client_access hash:/etc/postfix/access
我如何让 Postfix 在该标题前面加上?
答案1
这回答了你的确切问题:https://web.archive.org/web/20150706131729/http://hoursofop.tumblr.com/post/17760274650
此处报告的快速步骤:
创建一个文件
/etc/postfix/sendgrid_headers
并将此行添加到其中:/^From:/ PREPEND X-SMTPAPI: {“category” : “Category Name”}
使用以下行更新你的 master.cf 文件:
smtp unix - - n - - smtp -o smtp_header_checks=regexp:/etc/postfix/sendgrid_header
它适用于 Ubuntu 系统,对我来说效果很好。请小心选择正确的smtp
行master.cf
。我使用制表符来缩进行-o
。
X-SMTPAPI
还要注意,SendGrid在发送电子邮件之前会删除其中的标题 - 因此您不会在那里找到它,但您会看到该类别出现在 SendGrid 仪表板中。
答案2
你好像拼错了header_checks
甚至smtp_client_restrictions
不是正确的拼写错误参数。☺
这种事情最好用一个简单的垫片sendmail
,你的PHP(或任何)脚本配置为使用,您知道。shim 脚本只是使用cat
和echo
命令的简单练习。MTS 确实不适合做这件事。
答案3
我在使用 Sparkpost 时遇到了类似的问题:我需要添加他们的自定义标题才能设置一些传递选项。
这个问题(向所有电子邮件添加自定义标题)有很多不同的解决方案。
我的解决方案是使用 Postfix header_checks 并将自定义标头添加到“发件人”标头的前面。
创建一个新的文件,名为 /etc/postfix/my_custom_header:
/^From:/i X-MSYS-API: { "options" : {"transactional": true} }
编辑 /etc/postfix/main.cf(附加到底部):
# Add custom Sparkpost X-MSYS-API header to all mails header_checks = regexp:/etc/postfix/my_custom_header
重新加载 Postfix 配置(此命令适用于 Debian Wheezy,在您的操作系统上可能有所不同)
service postfix reload
编辑: 不幸的是,这种方法将标头添加到全部电子邮件(接收和发送)。我仍在寻找一种方法,只将标题添加到出站电子邮件。