Я использую PHP с Apache в Linux, с Sendmail. Я использую функцию mail
PHP. Письмо отправляется, но в конверте есть Apache_user@localhostname
в MAIL FROM
(пример nobody@conniptin.internal), и некоторые удаленные почтовые серверы отклоняют это, потому что домен не существует (очевидно). Используя mail
, могу ли я заставить ее изменить конверт MAIL FROM
?
EDIT: если я добавлю заголовок в четвертом поле функции mail
(), это изменит поле « From
в заголовках тела сообщения и НЕ меняет конверт MAIL FROM
.
Я могу заставить его, sendmail -t -odb -oi -frealname@realhost
sendmail с sendmail -t -odb -oi -frealname@realhost
и sendmail -t -odb -oi -frealname@realhost
содержимое электронной почты с ним. Это лучший подход?
Есть ли лучший, более простой, более подходящий для PHP способ?
EDIT: Суть в том, что у меня должен быть RTM. Спасибо за ответы, пятый параметр работает, и все хорошо.
mail () имеет 4-й и 5-й параметры (необязательно). 5-й аргумент – это то, что должно быть передано как параметры непосредственно sendmail. Я использую следующее:
mail('to@blah.com','subject!','body!','From: from@blah.com','-f from@blah.com');
Вы можете попробовать это (im not sure tho):
ini_set("sendmail_from", yourmail@example.com); mail(...); ini_restore("sendmail_from");
Я бы также рекомендовал проверить PHPMailer . Это отлично подходит для создания и отправки электронной почты, что упрощает процесс, а также поддерживает SMTP.
PHP Официальная документация для почты ()
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
…
Дополнительные_параметры (необязательно)
Параметр Additional_parameters может использоваться для передачи дополнительных флагов в качестве параметров командной строки для программы, настроенной для использования при отправке почты, как определено параметром конфигурации
sendmail_path
. Например, это можно использовать для установки адреса отправителя конверта при использовании sendmail с параметром-f
sendmail.Этот параметр экранируется
escapeshellcmd()
внутренне, чтобы предотвратить выполнение команды.escapeshellcmd()
предотвращает выполнение команды, но позволяет добавлять дополнительные параметры. По соображениям безопасности пользователю рекомендуется дезинформировать этот параметр, чтобы избежать добавления нежелательных параметров в команду оболочки.Поскольку
escapeshellcmd()
применяется автоматически, некоторые символы, которые разрешены в качестве адресов электронной почты с помощью RFC в Интернете, не могут использоваться. mail () не может допускать такие символы, поэтому в программах, где требуется использование таких символов, рекомендуется использовать альтернативные способы отправки писем (например, использование фреймворка или библиотеки).Пользователь, который работает веб-сервер, должен быть добавлен в качестве доверенного пользователя в конфигурацию sendmail, чтобы предотвратить добавление заголовка «
X-Warning
» в сообщение, когда отправитель конверта (-f
) установлен с использованием этого метода. Для пользователей sendmail этот файл является/etc/mail/trusted-users
.
На самом деле вам нужно изменить имя хоста, на котором запущен Apache, плюс пользователь Apache работает как.
В вашем текущем случае это:
Изменение этих двух значений довольно просто и решит корень вашей проблемы.
Хотя, если вам нужно сделать это с PHP, то, возможно, используйте функции system/exec
. Я не думаю, что это будет работать на практике, хотя, поскольку вам нужно перезапустить Apache и, возможно, также весь хост для новых имен, которые будут использоваться.