Назад | Перейти на главную страницу

Почему sendmail пропускает мой набор правил 98?

Я использую sendmail 8.14.4 на x64 Centos 6.3. и следовали инструкциям Адамо в: Как мне настроить sendmail (или другой почтовый сервер) на прием исходящей почты, но не на ее отправку? для отправки всех писем в определенный почтовый ящик следующим образом:

LOCAL_RULE_0
R$* < @ $=w . > $*              $#local $: $1 
R$* < @ $* . > $*               $#local $: quicksilver

Это прекрасно компилируется с M4 и помещает правила в файл .cf с другим, который, кажется, там по умолчанию.

К сожалению, sendmail не отправляет сообщения в указанный почтовый ящик.

Если я сбегу

sendmail -d21.12 q@q.com 

выходные данные отладки показывают, что он запускает 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 . >
...

Тестовое электронное письмо:

echo 'this is a test'| mail -s test_email q@q.com

отправляет напрямую на q@q.com

sendmail -bt
0 q@q.com

переводится на q@q.com (не переводится), но странно

sendmail -bt
3,0 q@q.com

переводится как ртуть

Итак, на данный момент я могу предположить, что sendmail либо не канонифицируется первым при отправке писем, либо что sendmail каким-то образом настроен на то, чтобы не запускать локальные правила после набора правил 0.

Есть мысли, почему адреса не переводятся?

Хорошо ... Кажется, я нашел проблему ... или, по крайней мере, решил ее.

При проверке журнала почты я заметил, что после удаления (чтобы начать все сначала) и перезапуска sendmail журнал почты больше не появлялся. Я перезагрузил машину, чтобы все сбросить, и теперь она работает.

Я определенно перезапускал службу каждый раз, используя «перезапуск службы sendmail», но теперь, когда я иногда думаю об этом, это указывало на то, что остановка службы не удалась. Я полагаю, что вполне возможно, что служба никогда не останавливалась должным образом, и поэтому каждый раз, когда я перезапускал, она либо не запускалась, но сообщала ОК, потому что она уже была запущена, либо что она запускала второй экземпляр. Это на самом деле не объясняет, почему sendmail -bt выполнял перевод, если, возможно, при отладке он не загружает отдельную копию конфигурации в частный контекст.

На случай, если кто-то еще встретится в этой ветке, один из участников группы comp.mail.sendmail предложил немного другой подход, а именно:

Он сказал, что перехват всей электронной почты на нелокальные адреса может быть выполнен с помощью SMART_HOST.

define(`SMART_HOST',`local:quicksilver')dnl

перенаправит на локальную учетную запись. Я проверил документацию, и похоже, что это еще один хороший способ решить проблему.

Я обнаружил, что отладка файлов sendmail сложна. Проблема в том, что когда вы вызываете sendmail, как и при первой попытке, то, что он делает, не выполняет доставку вообще, то, что он делает, это только запускает фазу отправки sendmail (обычно представленную submit.cf), а не как вы думаете, полный файл sendmail.cf.

Я не помню, 0,3 или 3,0 - лучший способ проверить, попробуйте оба.

Я почти уверен, что ваш локальный набор правил применяется, но не во время отправки.