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