Apache сбрасывает Return-Path: на ‹[email protected]› в функции PHP mail()

Следующие заголовки отправляются с помощью функции PHP mail():

$emailheaders = "From: " . $sender . "\n";
$emailheaders .= "Return-Path: " . $sender . "\n";
$emailheaders .= "MIME-Version: 1.0\n";
$emailheaders .= "Content-type: text/html; charset=UTF-8\r\n";

mail($email, $subject, $body, $emailheaders);

Он работает нормально, за исключением того, что Return-Path: сбрасывается на [email protected], или, по крайней мере, это то, что отображается при просмотре расширенных заголовков для электронных писем, полученных с использованием вышеуказанных заголовков. Естественно, это означает, что отказы по электронной почте не приходят.

Сбрасывает ли Apache заголовки, и в этом случае почему, или я неправильно использую mail()?

Что я могу сделать, чтобы этого не произошло. Об использовании пятого параметра mail() (например, -f [email protected]) не может быть и речи, поскольку PHP находится в безопасном режиме, и провайдер не изменит его. Я полагаю, что нет никакого способа разрешить пятый параметр для определенных пользователей, несмотря на то, что безопасный режим включен.

На сервере работают Apache 2.2.3 и PHP версии 5.1.6.


person Matte    schedule 18.12.2012    source источник
comment
Можете ли вы также добавить поле Reply-To и посмотреть, что произойдет? И теперь вы смешиваете '\n' и '\r\n'. В большинстве примеров почты php используется \r\n, так что вы можете сначала исправить это.   -  person huysentruitw    schedule 18.12.2012
comment
добавление ответа ничего не меняет. Относительно отсутствующего \r см. сообщение ниже.   -  person Matte    schedule 18.12.2012


Ответы (2)


Агент передачи почты (MTA) сервера переопределяет файл return-path. Например, если вы используете Exim:

Установите return-path в файле конфигурации /etc/exim/exim.conf:

return_path = [email protected]

Если у вас нет доступа к конфигурации сервера или пятому параметру mail(), то, вероятно, вы ничего не сможете сделать.

person MrCode    schedule 18.12.2012
comment
Что ж, возможно, я смогу убедить хозяина изменить его. Однако у меня очень мало опыта работы с настройками Apache/сервера, поэтому я не знаю, с чего начать. Но если бы я предложил жизнеспособное решение веб-хостингу, они могли бы просто это сделать. Что, по вашему мнению, должно быть в файле exim.conf вместо этого? - person Matte; 18.12.2012
comment
Если вы можете попросить их использовать ваш адрес электронной почты в качестве фиксированного пути возврата, то вы, вероятно, можете попросить их запустить php в небезопасном режиме. Дайте им прочитать это, чтобы они поняли, что им следует изменить свой общий сервер. инфраструктура - person huysentruitw; 18.12.2012
comment
@Matte, они могут использовать любой другой MTA, такой как sendmail, поэтому я бы не предлагал изменять конфигурацию хоста, просто скажите им, чего вы хотите достичь, т.е. скажите им, что вы хотите, чтобы ваш адрес электронной почты был return-path и что вы не можете сделайте это сами, потому что это часть конфигурации MTA. - person MrCode; 18.12.2012
comment
@MrCode Хорошо, я попробую. Спасибо за совет. - person Matte; 18.12.2012

Вы разделяете заголовки, используя \n, но согласно PHP это должно быть \r\n (см. Какой разрыв строки в заголовке почты php, \r\n или \n?).

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

person Hugo Delsing    schedule 18.12.2012
comment
Правильно ты. Однако я удалил \rs, прочитав, что у людей были проблемы с его использованием. Другими словами, это не работает ни с \r, ни без него. - person Matte; 18.12.2012