【问题标题】:Broken syntax in Postfix header_checksPostfix header_checks 中的语法错误
【发布时间】:2014-08-13 10:02:03
【问题描述】:

我正在设置 Postfix 以根据接收者编辑标题。这是通过 header_checks(http://www.postfix.org/header_checks.5.html)

逻辑如下: 如果电子邮件发送到“erik@sorgaard.net”,那么我们复制“发件人”字段并将其粘贴到“回复”字段,“发件人”字段也设置为“erik@sorgaard.net”。

我没有使用正则表达式的经验,但通过一些搜索,我得出了以下结论:

if /^To: (erik@sorgaard.net)\s.*$/
/^From: (.+@.+)\s.*$/ PREPEND Reply-To:$1
/^From: (.+@.+)\s.*$/ REPLACE From: erik@sorgaard.net
endif

这不起作用。我不确定语法有什么问题,但非常感谢任何帮助。

问候埃里克

【问题讨论】:

  • 你想让正则表达式匹配id's吗?
  • 不,我不知道这里有任何 id,只是表示为字符串的纯电子邮件地址。此语法:(.+@.+) 仅用于匹配实际的电子邮件地址,而不是任何包含名称的尾字符串。
  • documentation 表示if /pattern/flags endif 如果输入字符串与/pattern/ 匹配,则将该输入字符串与 if 和 endif 之间的模式进行匹配。虽然您的模式是 To 标头,但您如何匹配 if 中的 From 标头?
  • 那么if 语句只真正依赖于To 字段。只要匹配,脚本就应该编辑FromReply-To 字段。我知道我的代码可能很无聊,但我完全迷失在这里,希望能得到任何帮助。

标签: regex postfix-mta email-headers


【解决方案1】:

看起来接受的答案可能会误导。

如果你在 header_checks 中使用 if-endif,你应该记住以下几点:

If  the  input  string  matches /pattern/, then match that input
string against the patterns between if and endif.  The if..endif
can nest

来自http://www.postfix.org/header_checks.5.html

注意“然后匹配那个输入字符串”。这意味着您不能在 if/endif 块中操作任何标头,但您在 if 语句中使用的标头除外。

【讨论】:

    【解决方案2】:

    问题是 header_checks 只对每个电子邮件行应用一次,因此跳过了 seconf "From" 行(第 3 行)。

    【讨论】:

      猜你喜欢
      • 2019-03-13
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多