在 Postfix 中将 X-header 添加到所有中继消息的前面

在 Postfix 中将 X-header 添加到所有中继消息的前面

我有几个运行 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 系统,对我来说效果很好。请小心选择正确的smtpmaster.cf。我使用制表符来缩进行-o

X-SMTPAPI还要注意,SendGrid在发送电子邮件之前会删除其中的标题 - 因此您不会在那里找到它,但您会看到该类别出现在 SendGrid 仪表板中。

答案2

你好像拼错了header_checks甚至smtp_client_restrictions不是正确的拼写错误参数。☺

这种事情最好用一个简单的垫片sendmail,你的PHP(或任何)脚本配置为使用,您知道。shim 脚本只是使用catecho命令的简单练习。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
    

编辑: 不幸的是,这种方法将标头添加到全部电子邮件(接收和发送)。我仍在寻找一种方法,只将标题添加到出站电子邮件。

相关内容