записи sendmail и MX, когда почтовый сервер отсутствует на веб-хосте - PullRequest
3 голосов
/ 27 ноября 2008

Это проблема, которую, я уверен, легко исправить, но я весь день бился с ней.

Я разрабатываю новый веб-сайт для клиента. Сайт находится по адресу (это пример) website.com. У меня есть скрипт PHP-формы для отправки запросов посетителей по электронной почте request@website.com.

Когда я кодировал это на промежуточном сервере в другом домене, все работало нормально. Когда я переместил его на website.com, почтовые сообщения так и не пришли. Веб-сервер находится на виртуальном хосте с крупным провайдером.

Вот что я узнал с тех пор: почтовый сервер моего клиента - это Microsoft Exchange на физическом ящике в их офисе. Всякий раз, когда кто-то из внешнего мира отправляет электронное письмо по адресу request@website.com, приходит письмо. Но , если веб-сервер отправляет на тот же адрес электронной почты, каждый раз происходит сбой. Это не проблема PHP. Я защищаю оболочку на веб-сервере и проверил это как с sendmail, так и с почтовым приложением UNIX. Я также проверил это, отправив по электронной почте различные учетные записи электронной почты из оболочки. Например, я могу написать себе по электронной почте, но никто на домене website.com.

Короче говоря, когда я захожу на сайт website.com, отправка писем по электронной почте на адрес questions@website.com, user@website.com, another_user@website.com завершается ошибкой. Все остальные адреса работают нормально. Я обнаружил, что эти отброшенные письма направляются на «ловящую» учетную запись веб-сервера, где они находятся в папке «Входящие».

Я выполнил поиск MX на website.com. Запись MX указывает на mailsec.website.com. Я могу подключиться к порту 25 mailsec.website.com и посмотреть SMTP-сервер.

Мне кажется, что website.com не выполняет поиск MX, когда отправляет почту по адресуques@website.com. Моя теория состоит в том, что он распознает домен как локальный, видит, что не существует «запрашивающей» учетной записи пользователя, чтобы доставить его, и сбрасывает почту в универсальную учетную запись. Я хочу заставить sendmail выполнить поиск MX и отправить сообщение на сервер Exchange. Я в конце остроумие здесь. Я не могу понять, как это сделать.

Впрочем, я могу быть здесь далеко от базы и совершенно неправильно диагностировал это. Интернет-почта и MX всегда казались мне черным искусством, и мое невежество определенно проявляется в этом вопросе.

Ответы [ 7 ]

9 голосов
/ 27 ноября 2008

Я думаю, проблема в том, что sendmail (ваш процесс) общается с локальным демоном sendmail. Локальный демон sendmail считает, что поскольку это сайт website.com, он должен знать, как доставлять электронную почту. К сожалению, фактический адрес в поле to не существует на веб-сервере, и поэтому он сбрасывает его в почтовый ящик «catchall». Вам следует поговорить с вашим интернет-провайдером и попросить его обновить конфигурацию sendmail, чтобы почта, адресованная ... @ website.com, пересылалась в почтовый обменник, а не обрабатывалась локально.

3 голосов
/ 06 марта 2013

Sendmail по умолчанию угадывает список локальных почтовых доменов. Его можно отключить, используя следующую строку в вашем файле sendmail.mc:

define(`confDONT_PROBE_INTERFACES',`True')

В качестве корневого списка локальных почтовых доменов до и после изменения.

echo '$=w' | sendmail -Am -bt

Вы увидите, какие домены следует добавить «вручную» (обычно) в файл / etc / mail / local-host-names после отключения автоматического угадывания.

P.S. Для вопросов по sendmail вы можете использовать новости: comp.mail.sendmail

1 голос
/ 27 ноября 2008

tvanfosson в основном имеет его, но в качестве временного обходного пути вы должны иметь возможность изменить свой сценарий так, чтобы он отправлял по почте «user@mailsec.website.com», и тогда почта будет доставляться на реальный почтовый сервер.

0 голосов
/ 01 октября 2018

Застрял на той же проблеме. MX указывает на внешний сервер Exchange, но php / sendmail не просматривал эту запись. Вместо этого письма, размещенные WordPress на этом веб-сервере, помещаются в почтовый ящик catchall.

Решением было удаление ВСЕХ почтовых ящиков на веб-сервере. Теперь sendmail интересовался MX, и все письма отправлялись на Exchange.

Однако Exchange использует почтовый сервер веб-пространства в качестве SmartHost для исходящей почты. В качестве решения для этого мы смогли использовать учетные данные FTP для доступа к почтовому серверу. Я предполагаю, что это решение не работает на всех провайдерах на этой планете, но в нашем случае (all-inkl.com) оно сработало.

0 голосов
/ 30 мая 2015

Я новичок здесь. Хотел продлить RB_CWI ответ, но я не могу комментировать. Его решение отлично сработало.

Вы не , необходимые для определения ДОМЕНА ().

Однако в моей системе мне потребовалось установить пакет sendmail-cf.

Приведенные ниже инструкции были выполнены для CentOS 6.5

Сначала установите sendmail-cf

sudo yum install sendmail-cf

Затем отредактируйте senmail.mc

sudo vi /etc/mail/sendmail.mc

В нижней части файла добавьте FEATURE (relay_entire_domain) dnl, чтобы оно выглядело так:

...
FEATURE(relay_entire_domain)dnl
MAILER(smtp)dnl        # right above this line
MAILER(procmail)dnl
dnl MAILER(cyrusv2)dnl

Сохраните файл и перезапустите sendmail.

sudo service sendmail restart
0 голосов
/ 02 января 2011

Для меня сработало добавление записи MX на веб-сервере, на котором размещен веб-сайт, который указывает на хост, назначенный на исходном сервере доменных имен. В представленном здесь случае будет запись mx, указывающая на: mailsec.website.com

0 голосов
/ 01 апреля 2009

Отредактируйте файл tsm.cf (в / etc / mail / или аналогичный), включив в него

FEATURE(relay_entire_domain) 

между строками ДОМЕН () и ПОЧТА (). Поскольку вы редактируете файл, вы можете также улучшить безопасность с помощью

define(`confPRIVACY_FLAGS',``noexpn,novrfy'')

После изменения файла tsm.cf (или любого файла конфигурации sendmail) перезапустите или SIGHUP процесса sendmail.

Это изменение необходимо, поскольку серверы WWW и MX для домена не существуют в одном и том же пространстве процесса; эта функция запускает sendmail для обработки сообщений для домена, используя механизм внешней доставки.

Отредактированная часть файла tsm.cf должна выглядеть примерно так:

DOMAIN(website.com)dnl
FEATURE(relay_entire_domain)dnl
define(`confPRIVACY_FLAGS',``noexpn,novrfy'')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
...