Я использую 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 с параметром-fsendmail.Этот параметр экранируется
escapeshellcmd()внутренне, чтобы предотвратить выполнение команды.escapeshellcmd()предотвращает выполнение команды, но позволяет добавлять дополнительные параметры. По соображениям безопасности пользователю рекомендуется дезинформировать этот параметр, чтобы избежать добавления нежелательных параметров в команду оболочки.Поскольку
escapeshellcmd()применяется автоматически, некоторые символы, которые разрешены в качестве адресов электронной почты с помощью RFC в Интернете, не могут использоваться. mail () не может допускать такие символы, поэтому в программах, где требуется использование таких символов, рекомендуется использовать альтернативные способы отправки писем (например, использование фреймворка или библиотеки).Пользователь, который работает веб-сервер, должен быть добавлен в качестве доверенного пользователя в конфигурацию sendmail, чтобы предотвратить добавление заголовка «
X-Warning» в сообщение, когда отправитель конверта (-f) установлен с использованием этого метода. Для пользователей sendmail этот файл является/etc/mail/trusted-users.
На самом деле вам нужно изменить имя хоста, на котором запущен Apache, плюс пользователь Apache работает как.
В вашем текущем случае это:
Изменение этих двух значений довольно просто и решит корень вашей проблемы.
Хотя, если вам нужно сделать это с PHP, то, возможно, используйте функции system/exec . Я не думаю, что это будет работать на практике, хотя, поскольку вам нужно перезапустить Apache и, возможно, также весь хост для новых имен, которые будут использоваться.