Как я могу заставить заголовок From: (отправитель конверта) в PHP, не помещая его в mail()?
у меня есть веб-сервер разработки (CentOS Lamp stack), который использует настройку SMTP-реле в postfix для отправки электронной почты. Мы используем mailgun С несколькими пользователями, настройка похожа на этой, но и с конкретными пользователями, а не просто по шаблону электронная почта:
/etc / postfix / main.cf
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_auth_enable = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/relayhost_map
smtp_sender_dependent_authentication = yes
smtp_sasl_security_options = noanonymous
relayhost = [smtp.mailgun.org]:587
/и т. д./Есть postfix/sasl_passwd
# our domains
no-reply@domain.com postmaster@domain.com:password1
info@domain2.com postmaster@domain2.com:password2
support@domain3.com postmaster@domain3.com:password3
# in-case we don't have it setup, use a default
#[smtp.mailgun.org]:587 postmaster@domain2.com:password2
/ etc / postfix / relayhost_map
no-reply@domain.com [smtp.mailgun.org]:587
info@domain2.com [smtp.mailgun.org]:587
support@domain3.com [smtp.mailgun.org]:587
настройки журналирования электронной почты , я с проверкой подлинности каждого разработчика на машину, используя собственные учетные данные для SMTP. Я хочу настроить его так, чтобы разработчикам не нужно было добавлять additional_headers
или additional_parameters
чтобы получить правильный SMTP-ретранслятор в postfix - и действительно это потребуется много работы для настройки разных почтовых заголовков в коде для разных разработчиков, особенно с версионным кодом. Я отвлекся. Это отлично работало со стороны postfix, когда я использую следующее:
mail('email@address.tld', 'subject', 'message here...', 'From: noreply@domain.com', '-fnoreply@domain.com');
поэтому я добавил следующее к конфигурациям vhost:
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -fnoreply@domain.com"
который успешно позволил мне избавиться от -f
additional_parameter
и все еще отправить должным образом. Затем я добавил:--25-->
php_value sendmail_from "noreply@domain.com"
на phpinfo()
свалка я вижу локальное значение для sendmail_from
установлен правильно, однако теперь, когда я отправляю электронное письмо, оно появляется как:
None@domain.com от имени Apache
кажется, что правильный отправитель (MIME, а не конверт, так как postfix распознает аутентификацию и дает 250 большой успех). С помощью postfix logging on verbose я вижу только ссылки на правильное электронное письмо от атрибута ввода отправителя.
в mailgun, я вижу следующую информацию журнал, однако, для электронной почты, когда From: noreply@domain.com
не используется:
...
"envelope": {
"transport": "smtp",
"sender": "noreply@domain.com",
"sending-ip": "x.x.x.x",
"targets": "email@address.tld"
},
"message": {
"headers": {
"to": "email@address.tld",
"message-id": "2014061111016.ABC1D23456E@domain.com",
"from": "noreply@domain.com (Apache)",
"subject": "Debug Test"
},
"attachments": [],
"recipients": [
"email@address.tld"
],
"size": 654
},
...
что интересно, это тот же журнал для when From: noreply@domain.com
is настоящее время message->headers->from
установлен correcetly к noreply@domain.com
без (Apache)
дополнительно. Конечно, это означает, что это ошибка PHP и что PHP не использует sendmail_from
правильно значение?
Итак, имея все это в виду, мой результирующий вопрос как я могу установить отправителя MIME по умолчанию (от заголовок) в PHP, кроме как в
2 ответов
sendmail_from игнорируется
от http://www.php.net/manual/en/mail.configuration.php:
sendmail_from string
Какой почтовый адрес" From: "следует использовать в Почте, отправленной с PHP под Windows. Эта директива также устанавливает заголовок" Return-Path:".
Итак, потому что вы используете стек лампы CentOS,не Windows этот параметр игнорируется.
также:
sendmail_path string
Если установлено,smtp
,smtp_port
иsendmail_from
игнорируются и выполняется указанная команда.
так sendmail_from
также игнорируется, потому что вы используете sendmail_path
.
решение
вы также можете пройти -F
(заглавная F) с пустым значением, чтобы удалить "полное имя отправителя" из заголовка:
передать -f noreply@domain.com -F ""
до
обязательно установите постфикс с правильной картой SMTP sasl. Обычно находится в /etc/postfix/main.cf
найти или добавить:
# SASL
smtp_sasl_password_maps = static:noreply@domain.com:xxxxx
где электронная почта-это настроенная электронная почта SMTP, а xxxxx-пароль SMTP, который вы настроили в mailgun.
дайте вашим услугам (включая postfix) перезапуск, и вы должны быть в бизнесе.