我正在尝试找到一种方法来根据当前的信封发件人重写信封发件人地址。 这个问题也有我需要的:
该问题包含以下代码:
SEnvFromSMTP
R$+ <@foo.org.> $: john.doe <@example.net.>
divert(0)
这会将信封从地址更改为[电子邮件保护]如果它是一个 @foo.org 地址。我需要以此为例并添加更多匹配项。例如,我可能还想将 @test.com 更改为[电子邮件保护]. 不管以何种方式堆叠重写规则都无法产生任何效果。
我正在阅读这一页:
http://www.sendmail.org/~ca/email/doc8.12/op-sh-5.html
我非常确定这需要一些正则表达式,但我无法弄清楚如何将它们组合在一起。也非常希望将任何添加的配置保留在 sendmail.mc 文件中。
谢谢
答案1
那里必须是在 R 行中,$: 之前有一个制表符 (\t)。
LOCAL_CONFIG
C{FixSenderDomains}foo.org test.com
MAILER_DEFINITIONS
SEnvFromSMTP
R$+ <@ $={FixSenderDomains} .> $: john.doe <@example.net.>
divert(0)
您可以使用以下脚本进行测试
#!/bin/sh
/usr/sbin/sendmail -d21.12 -bt <<END
/tryflags es
/try esmtp [email protected]
END
答案2
我似乎无法格式化评论,因为它看起来真的很混乱,所以需要创建一个答案。
使用规定的方法进行测试,这是我看到的结果:
使用以下配置:
LOCAL_CONFIG
C{FixSenderDomains}test1.com test2.com
MAILER_DEFINITIONS
SEnvFromSMTP
R$+ <@ $={FixSenderDomains} .> $: john.doe <@example.net.>
divert(0)
当我测试来自 test1.com 和 test2.com 的邮件(单独测试)时得到以下输出:
rewritten as: test < @ test1 . com . >
-----trying rule: $+ < @ $={FixSenderDomains} . >
-----rule matches: $: john . doe < @ example . net . >
rewritten as: test < @ test2 . com >
-----trying rule: $+ < @ $={FixSenderDomains} . >
----- rule fails
因此无法弄清楚为什么一个域被评估为 < @ test1 . com . > 而另一个域被评估为 < @ test2 . com >(缺少尾随句点)。如果我将配置更改为以下内容,它就会起作用:
LOCAL_CONFIG
C{FixSenderDomains} test1.com. test2.com.
C{FixSenderDomains} test1.com test2.com
MAILER_DEFINITIONS
SEnvFromSMTP
R$+ <@ $={FixSenderDomains} > $: john.doe <@example.net.>
divert(0)
我不需要对太多域执行此操作,因此如果我必须像上面那样进行配置,那就没什么大不了的,但我仍然非常希望能够解释这种行为。