2008-11-27 11 views
2

Это проблема, которую я уверен, легко исправить, но я весь день бил головой об этом.записи sendmail и MX, когда почтовый сервер не находится на веб-узле

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

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

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

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

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

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

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

+0

Посмотрите на обсуждение на http://serverfault.com/questions/98283/sendmail-delivering-locally-instead-of-to-mta-in-mx-record. Ответ от Пауэла сделал это для меня. – 2012-02-01 17:35:18

ответ

8

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

1

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

0

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

FEATURE(relay_entire_domain) 

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

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

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

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

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

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

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

3

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

define(`confDONT_PROBE_INTERFACES',`True') 

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

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

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

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

0

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

Вы должны указать не, чтобы определить DOMAIN().

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

Приведенные ниже инструкции были сделаны на CentOS 6,5

Во-первых, установить Sendmail-ср

sudo yum install sendmail-cf 

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

sudo vi /etc/mail/sendmail.mc 

В нижней части file add 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 

 Смежные вопросы

  • Нет связанных вопросов^_^