Как настроить реальное доменное имя для адреса отправителя


10

Я пытался отправить письмо с помощью mail()функции php, но это как-то не удалось, жалуясь, что требуется настоящее доменное имя. В почтовом журнале наблюдается следующее:

sendmail 4984 r25984: from = apache, size = 273, class = 0, nrcpts = 1, msgid = <201.r25@localhost.localdomain>, relay = apache @ localhost
sendmail 4985 r25985: ruleset = check_mail, arg1 =, relay = mydomain.com [127.0.0.1], reject = 553 5.5.4 ... Для адреса отправителя требуется реальное доменное имя
sendmail 4984 r25984: to=external@server.com, ctladdr = apache (48/48), задержка = 00: 00:01, xdelay = 00: 00: 00, mailer = relay, pri = 30273, relay = [127.0.0.1] [127.0.0.1], dsn = 5.6.0, stat = ошибка формата данных
sendmail 4984 r25984: r25984: DSN: ошибка формата данных

cron может отправлять электронную почту по адресу external@server.com всякий раз, когда возникает проблема с logrotate. Я не уверен, почему php не может это сделать. Я попытался внести изменения в конфигурацию по умолчанию в `sendmail.mc следующим образом:

MASQUERADE_AS(`mydomain.com')dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
MASQUERADE_DOMAIN(localhost)dnl
MASQUERADE_DOMAIN(localhost.localdomain)dnl
MASQUERADE_DOMAIN(mycom)dnl

Но, похоже, это не имеет никакого эффекта. Заголовок с адреса в функции php mail уже установлен. Я также гарантировал, что SELinux httpd_can_sendmailвключен. Что еще мне нужно сделать, чтобы доставить почту?


Вы отредактировали sendmail.mc, изменили строки localhost.localdomainи localhostчто-то значимое и скомпилировали файл mc в sendmail.cf?
fboaventura

@fboaventura, нет, я раскомментировал две строки, удалив dnlперед ними.
Переполнение вопроса

Можете ли вы добавить соответствующую часть вашего PHP-сценария, где вы вызываете mail()? И, sendmail.mcэто не правильный файл конфигурации, этот файл должен быть скомпилирован в sendmail.cfиспользование m4.
fboaventura

@fboaventura, спасибо, я знаю, что в отношении требований к компиляции я могу заставить его работать сейчас. Смотрите мой ответ ниже. Спасибо за вашу помощь :)
Переполнение вопроса

Ответы:


10

Я думаю, что я только что решил это. У меня есть следующее в / etc / hosts :

127.0.0.1 www.mydomain.com test.mydomain.com
127.0.0.1 cdn.mycdn.com
127.0.0.1 localhost.localdomain localhost myserver.com

Мне нужно разместить myserver.com перед строкой, localhost.localdomainчтобы sendmail подумал, что использует реальный домен для отправки электронной почты.


3
Вы могли бы определенно принять свой собственный ответ, который был решением ... Как sidenote, это обычно /etc/hosts(с "s"), кроме этого: хороший ответ!
Левит

2

Вы должны настроить в своих скриптах заголовки вашего письма From: sender@domain.com.


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

1

В вашем sendmail.mcдобавлении:

LOCAL_CONFIG
Djmyserver.com

Перекомпилируйте sendmail.cf, перезапустите sendmail, и вы должны быть в порядке


1

В моем случае в Ubuntu 16.04 для экземпляра AWS необходимо было добавить /etc/mail/sendmail.mc:

define(`confDOMAIN_NAME', `mydomainname.com')dnl

в строке перед MAILER_DEFINITIONSстрокой в ​​конце файла И добавьте ту же строку в конец /etc/mail/submit.mc. Затем введите sudo suправа доступа root и скомпилируйте для настройки:

m4 sendmail.mc > sendmail.cf
m4 submit.mc > submit.cf

... тогда exitsudo. Наконец, sudo service sendmail restartдля перезапуска sendmail, и оттуда электронные письма появлялись как отправленные с доменного имени. Ни одна из других команд FEATURE или MASQUERADE не требовалась, ни запись в /etc/hostsфайле.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.