Как изменить конверт с адреса с помощью PHP-почты?

Я использую 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. Спасибо за ответы, пятый параметр работает, и все хорошо.

Solutions Collecting From Web of "Как изменить конверт с адреса с помощью PHP-почты?"

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 работает как.

В вашем текущем случае это:

  • Пользователь Apache: никто
  • Имя хоста сервера: conniptin.internal

Изменение этих двух значений довольно просто и решит корень вашей проблемы.

Хотя, если вам нужно сделать это с PHP, то, возможно, используйте функции system/exec . Я не думаю, что это будет работать на практике, хотя, поскольку вам нужно перезапустить Apache и, возможно, также весь хост для новых имен, которые будут использоваться.