Задать вопрос

Sendmail пытается доставить локально, не смотря на smarthost

Приветствую. Есть сервер (на самом деле jail, но это роли не играет). Он называется, для примера, engine.example.com. На нём крутится бэк-энд веб-сервера FreeBSD+NGinx+PHP. На нём же поднят штатный sendmail, настройки которого дефолтны, за исключением smarthost — здесь указан наш релей (local.example.com). Если PHP-скрипт генерирует письмо, оно отправляется штатными средствами: попадает сначала на локальный sendmail, который следом пересылает его на релей, а тот уже отправляет его адресату. Схема достаточно простая и эффективная. И работает, за исключением следующего момента:
Если я отправляю письмо на любой адрес кроме some@example.com, оно успешно уходит на смартхост, но если я отправляю на some@example.com, сендмэйл пытается это письмо доставить локально. Естественно, этого ящика на этом сервере не существует и в логах записана ошибка доставки. Как сделать так, чтобы все письма на все домены доставлялись через smarthost? И чтобы родной sendmail ничего не пытался доставить локально, кроме писем для адресатов без доменной части.

Умные комментарии типа «поставить postfix, exim, etc» прошу не оставлять: не найду выход — поставлю. Хочу разобраться в проблеме, а не уйти от неё.

Ниже проиллюстрирую логами.

Это попытка доставить письмо на corporate@example.com, sendmail зачем-то пытается доставить его локально, не смотря на smarthost:
Dec 30 01:49:00 engine sendmail[67504]: pBTLn0Fq067504: from=root, size=91, class=0, nrcpts=1, msgid=<201112292149.pBTLn0Fq067504@example.com>, relay=root@localhost
Dec 30 01:49:00 engine sendmail[67504]: pBTLn0Fq067504: to=corporate@example.com, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30091, relay=[127.0.0.1] [127.0.0.1], dsn=5.1.1, stat=User unknown
Dec 30 01:49:00 engine sendmail[67504]: pBTLn0Fq067504: pBTLn0Fr067504: DSN: User unknown


Это тот же sendmail, корректно отправляет письмо на другой ящик:
Dec 30 02:05:07 engine sm-mta[71184]: pBTM576C071184: from=<noreply@example.com>, size=2276, class=-60, nrcpts=1, msgid=<eb14d11a7e7b4b34098b5f098a8e7206@example.com>, proto=ESMTP, daemon=IPv4, relay=engine.example.com [212.24.0.0] (may be forged)
Dec 30 02:05:07 engine sendmail[71183]: pBTM57Pl071183: to=kent2spb <some@mail.ru>, delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=140055, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (pBTM576C071184 Message accepted for delivery)
Dec 30 02:05:07 engine sm-mta[71188]: pBTM576C071184: to=<some@mail.ru>, delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=140276, relay=local.example.com. [10.0.0.99], dsn=2.0.0, stat=Sent (OK id=1RgO5z-0009KC-FJ)
  • Вопрос задан
  • 7542 просмотра
Подписаться 4 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 4
@MrCrock
Почтовый сервер sendmail считает почтовый домен локальным (то есть обрабатывает почту для данного домена) в следующих случаях, если на сервер указывают записи:
— Запись A или MX в прямой зоне DNS (проверяется командой host имя.домена)
— Hostname сервера
— Записи в /etc/hosts
— Записи в обратной зоне DNS (проверяется командой host ip-address)
— Записи в /etc/mail/local-hosts-names, /etc/mail/virtusertable и непосредственно имя домена может быть определено в конфигах sendmail (hostname.mc, sendmail.mc и из него который создается sendmail.cf — команда grep -i domain /etc/mail/* найдет эти записи.
Ответ написан
Riateche
@Riateche
Укажите в директиве local-host-names что-то, не совпадающее с этим доменом (например, localhost, несуществующий домен или пустое значение).
Ответ написан
Ilya_Drey
@Ilya_Drey
А у Вас случаем для домена example.com как MX запись прописан не этот сервер?
Ответ написан
@like-person
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы