Проблема PHP mail с www-данными
Я пытаюсь вызвать sendmail через почтовую функцию PHP следующим кодом:
$to = 'blah@email.state.edu';
$subject = 'test';
$message = 'test';
$headers = 'From: mail@smartrek.blah.me' . "rn" .
'Reply-To: mail@smartrek.blah.me' . "rn" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
Однако в моей почте.log я получаю сообщение, что from не является адресом, который я указал в заголовке:
<www-data@Name>: Sender address rejected: Domain not found
Почему это?? Я запускаю PHP fast-cgi на ubuntu Почему sendmail не использует заголовок, который я указал через PHP-код?
4 ответа:
Похоже, что
www-data@Name
- это ваш конверт "от" адреса. Конверт" от "адрес отличается от адреса, который появляется в заголовке вашего письма" от:". Это то, что sendmail использует в своем обмене "MAIL FROM/RCPT TO" с получающим почтовым сервером.Основная причина, по которой он называется адресом "конверта", заключается в том, что он появляется вне заголовка и тела сообщения, в необработанном SMTP-обмене между почтовыми серверами.Конверт по умолчанию" от " адреса в unix зависит о том, что реализация программы sendmail, который вы используете. Но обычно он будет установлен на имя пользователя запущенного процесса, за которым следуют " @ " и имя хоста машины. В типичной конфигурации это будет выглядеть примерно так:
username@example.com
.Если ваши письма отклоняются получающими почтовыми серверами, или если вам нужно изменить адрес, на который отправляются письма bounce, вы можете изменить адрес конверта "от", Чтобы решить свои проблемы.
Чтобы изменить адрес конверта "from" на unix, вы укажите опцию "- r " для вашего двоичного файла sendmail. Вы можете сделать это глобально в php.ini, добавив опцию "- r" в командную строку "sendmail_path". Вы также можете сделать это программно из PHP, передав
-r mail@smartrek.blah.me
в качестве аргументадополнительного параметра функции mail () (5-й аргумент). Если вы укажете адрес в обоих местах, двоичный файл sendmail будет вызван с двумя опциями "- r", которые могут иметь неопределенное поведение в зависимости от вашей реализации sendmail. С Постфиксный MTA, более поздние опции" - r " молчаливо переопределяют более ранние опции, что позволяет установить глобальное значение по умолчанию и по-прежнему получать разумное поведение при попытке переопределить его локально.EDIT
о необязательных флагах, которые могут быть переданы в sendmail:
-f
установит адрес From,-r
переопределит путь возврата по умолчанию, который генерирует sendmail (обычно используется адрес From). Если вы хотите, чтобы ваши отскоки шли по другому адресу, чем от адреса, попробуйте использовать оба флага сразу:-f mail@smartrek.blah.me -r bounced-mail@smartrek.blah.me
Мой php.ini
[mail function] ; For Win32 only. ; http://php.net/smtp SMTP = localhost ; http://php.net/smtp-port smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from ;sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path ;sendmail_path = ; Force the addition of the specified parameters to be passed as extra parameters ; to the sendmail binary. These parameters will always replace the value of ; the 5th parameter to mail(), even in safe mode. ;mail.force_extra_parameters = ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename mail.add_x_header = On ; Log all mail() calls including the full path of the script, line #, to address and headers ;mail.log =
Хотя это старый вопрос, я добавляю этот ответ на случай, если он кому-то поможет:
У меня была та же проблема с заголовком
From:
, который был переписан вwww-data@host...
в конечном итоге я отследил его до службы ssmtp bridge, которая передавала почту с нашего веб-сервера на наш почтовый сервер. Я добавил строкуFromLineOverride=YES
в файл/etc/ssmtp/ssmtp.conf
, и проблема исчезла.