为什么sendmail跳过我的规则集98?

我在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是检查出来的最好办法。

我很确定你的本地规则集正在被应用,而不是在提交时间。