我在x64 Centos 6.3上使用sendmail 8.14.4。 并遵循adamo提供的指示: 如何configurationsendmail(或其他邮件服务器)接受出站邮件,但不发送出去? 将所有邮件发送到特定邮箱,如下所示:
LOCAL_RULE_0 R$* < @ $=w . > $* $#local $: $1 R$* < @ $* . > $* $#local $: quicksilver
这与M4编译就好了,将规则存放在.cf文件中,而另一个似乎是默认存在的规则。
不幸的是,sendmail不会发送消息到指定的邮箱。
如果我跑
sendmail -d21.12 [email protected]
debugging输出显示它正在运行Parse0,但它跳过ParseLocal(98),如下所示:
... rewrite: ruleset Parse0 returns: q < @ q . com . > rewritten as: q < @ q . com . > -----trying rule: < @ > ----- rule fails -----trying rule: $* -----rule matches: $: $> ParseLocal $1 -----skip subr ParseLocal (98) rewritten as: q < @ q . com . > -----trying rule: $* -----rule matches: $: $> Parse1 $1 rewrite: ruleset Parse1 input: q < @ q . com . > ...
testing电子邮件:
echo 'this is a test'| mail -s test_email [email protected]
直接发送到[email protected]
sendmail -bt 0 [email protected]
转换为[email protected](不翻译),但奇怪
sendmail -bt 3,0 [email protected]
确实转化为水银
所以在这一点上我最好的猜测是sendmail在发送邮件的时候不是封装,或者sendmail在规则集0之后设置为不运行本地规则。
任何想法为什么地址不被翻译?
好的…我似乎已经find了问题…或者至less解决了它。
我注意到在检查maillog后,删除(重新启动)并重新启动sendmail后,maillog没有再次出现。 我给了机器一个重启只是为了重置一切,现在它的工作。
我肯定每次使用“service sendmail restart”重新启动服务,但现在我偶尔会想到它会显示停止服务失败。 我想这可能是服务从来没有真正停止,所以每次我重新启动,要么是没有启动,但报告确定,因为它已经运行,或者它正在运行第二个实例。 这并不能解释为什么“sendmail -bt”做了一个翻译,除非在debugging的时候,它将一个单独的configuration拷贝加载到一个私有的上下文中。
为了防止其他人发生这种情况,comp.mail.sendmail小组的成员提出了一个稍微不同的方法,如下所示:
他说,捕获所有电子邮件到非本地地址可以完成使用SMART_HOST。
define(`SMART_HOST',`local:quicksilver')dnl
将redirect到本地帐户。 我已经检查了文档,看起来是解决问题的另一个好办法。
我发现debuggingsendmail文件是棘手的。 问题是,当你像初次尝试时那样调用sendmail时,它所做的并不是完成交付,它所做的只是运行sendmail的提交阶段(通常由submit.cf表示),而不是你认为它是完整的sendmail.cf文件。
我不记得是0,3还是3,0是检查出来的最好办法。
我很确定你的本地规则集正在被应用,而不是在提交时间。