записи sendmail и MX, когда почтовый сервер не находится на веб-хосте

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

Я разрабатываю новый веб-сайт для клиента. Веб-сайт находится по адресу (это пример) website.com. У меня есть скрипт формы PHP для отправки запросов посетителей по адресу [email protected].

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

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

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

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

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

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


person Jim Nelson    schedule 27.11.2008    source источник
comment
Посмотрите обсуждение на serverfault.com/questions/98283/. Ответ Павла сделал это за меня.   -  person    schedule 01.02.2012


Ответы (7)


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

person tvanfosson    schedule 27.11.2008

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

define(`confDONT_PROBE_INTERFACES',`True')

В качестве корневого списка локальных доменов электронной почты до и после изменения, используя:

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

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

После изменения sendmail.mc:

  1. Создать / скомпилировать новый sendmail.cf файл
  2. Перезапустите демон sendmail (или отправьте сигнал HUP)
person AnFi    schedule 06.03.2013

У tvanfosson в основном это есть, но в качестве временного обходного пути вы должны иметь возможность изменить свой сценарий так, чтобы он отправлял почту «[email protected]», а затем почта доставлялась на настоящий почтовый сервер.

person genehack    schedule 27.11.2008

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

FEATURE(relay_entire_domain) 

между строками DOMAIN () и MAILER (). Поскольку вы редактируете файл, вы можете также улучшить безопасность с помощью

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
person Community    schedule 01.04.2009

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

person JGM    schedule 01.01.2011

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

Вы не обязаны определять DOMAIN ().

Однако в моей системе мне требовалось установить пакет 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
person Glauco Cattalini Lins    schedule 30.05.2015

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

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

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

person Michael    schedule 01.10.2018