Я использую 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 - лучший способ проверить, попробуйте оба.
Я почти уверен, что ваш локальный набор правил применяется, но не во время отправки.