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

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

Я использую PHP с Apache в Linux, с Sendmail. Я использую функцию PHP mail. Письмо отправляется, но конверт имеет [email protected] в MAIL FROM (пример [email protected]), и некоторые удаленные почтовые серверы отклоняют это, потому что домен не существует (очевидно). Используя mail, я могу заставить его изменить огибающую MAIL FROM?

EDIT: если я добавляю заголовок в четвертом поле функции mail(), это изменяет поле From в заголовках тела сообщения и НЕ меняет конверт MAIL FROM.

Я могу заставить его, создав sendmail с помощью sendmail -t -odb -oi [email protected] и связав содержимое электронной почты с ним. Это лучший подход?

Есть ли лучший, более простой и более подходящий способ PHP?

EDIT: В нижней строке я должен иметь RTM. Спасибо за ответы, пятый параметр работает, и все хорошо.

4b9b3361

Ответ 1

mail() имеет 4-й и 5-й параметры (необязательно). 5-й аргумент - это то, что должно быть передано как параметры непосредственно sendmail. Я использую следующее:

mail('[email protected]','subject!','body!','From: [email protected]','-f [email protected]');

Ответ 2

Вы можете попробовать это (im not sure tho):

ini_set("sendmail_from", [email protected]);
mail(...);
ini_restore("sendmail_from");

Ответ 3

Я бы также рекомендовал проверить PHPMailer. Это отлично подходит для создания и отправки электронной почты, что упрощает процесс, а также поддерживает SMTP.

Ответ 4

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 не могут использоваться. почта()не может допускать таких символов, поэтому в программах, где использование таких символов, альтернативные способы отправки электронных писем (например, используя фреймворк или библиотеку).

Пользователь, которому работает веб-сервер, должен быть добавлен как доверенный пользователь конфигурации sendmail, чтобы предотвратить заголовок 'X-Warning' добавляется к сообщению, когда отправитель конверта (-f) устанавливается с использованием Этот метод. Для пользователей sendmail этот файл /etc/mail/trusted-users.

Ответ 5

На самом деле вам нужно изменить имя хоста машины Apache, а также пользователь Apache работает как.

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

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

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

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