Подтвердить что ты не робот

Проблема с электронной почтой PHP с www-данными

Я пытаюсь вызвать sendmail через почтовую функцию PHP следующим кодом:

$to      = '[email protected]';
    $subject = 'test';
    $message = 'test';
    $headers = 'From: [email protected]' . "\r\n" .
               'Reply-To: [email protected]' . "\r\n" .
                'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);

Однако в моем mail.log я получаю сообщение о том, что from не является адресом, указанным в заголовке:

<[email protected]>: Sender address rejected: Domain not found

Почему это? Я запускаю PHP fast-cgi на ubuntu Почему sendmail не использует заголовок, который я указал через код PHP?

4b9b3361

Ответ 1

Похоже, что [email protected] - ваш конверт "с". Адрес конверта "от" отличается от адреса, который отображается в заголовке "From:" письма. Это то, что sendmail использует в своем обмене "MAIL FROM/RCPT TO" с принимающим почтовым сервером. Основная причина, по которой он называется адресом "конверт", - это вне заголовка и тела сообщения, в необработанном обмене SMTP между почтовыми серверами.

По умолчанию конверт "от" в unix зависит от того, какую версию sendmail вы используете. Но обычно он будет установлен на имя пользователя запущенного процесса, за которым следуют "@" и имя хоста машины. В типичной конфигурации это будет выглядеть примерно как [email protected].

Если ваши электронные письма отклоняются при получении почтовых серверов или вам нужно изменить адрес электронной почты, отсылающий адрес, вы можете изменить адрес конверта "от", чтобы решить свои проблемы.

Чтобы изменить конверт "от" адреса в unix, вы указываете опцию "-r" для вашего двоичного файла sendmail. Вы можете сделать это глобально в php.ini, добавив параметр "-r" в командную строку "sendmail_path". Вы также можете сделать это программно из PHP, передав -r [email protected] в качестве аргумента дополнительного параметра для функции mail() (5-й аргумент). Если вы укажете адрес в обоих местах, двоичный файл sendmail будет вызываться с двумя параметрами "-r", которые могут иметь поведение undefined в зависимости от вашей реализации sendmail. С помощью Postfix MTA более поздние опции "-r" молча переопределяют более ранние параметры, позволяя установить глобальное значение по умолчанию и все же получить разумное поведение при попытке локализовать его.

ИЗМЕНИТЬ

О дополнительных флажках, которые можно передать sendmail: -f установит адрес From, -r переопределит возвращаемый по умолчанию путь возврата, который генерирует sendmail (обычно используется адрес From). Если вы хотите, чтобы ваши обратные отскоки переходили на другой адрес, отличный от адреса, попробуйте использовать оба флажка одновременно: -f [email protected] -r [email protected]

my 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 = [email protected]

; 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 =

Ответ 2

Хотя это старый вопрос, я добавляю этот ответ, если он кому-то помогает:

У меня была та же проблема, что и заголовок From:, который был переписан на [email protected]. Я в конечном итоге отследил его до службы моста ssmtp, которая отправляла почту с нашего веб-сервера на наш почтовый сервер. Я добавил строку FromLineOverride=YES в файл /etc/ssmtp/ssmtp.conf, и проблема исчезла.

Ответ 3

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

/etc/ssmtp/ssmtp.conf

Затем раскомментируйте эту строку:

FromLineOverride = ДА

После этого будут созданы заголовки персонажей.

Ответ 4

Это сработало для меня:

$mail->Sendmail = $mail->Sendmail.' -f '.$mail_errorsto;