Не как не могу разобраться с именем отправителя. У меня nginx, debian, ssmtp, php
Отправляю письмо при помощи:
$to = "awikong@mail.ru";
$subject = "Заголовок";
$message = "<b>Привет</b>";
$headers = "Content-type:text/html; charset = utf-8 \r\n";
$headers .= "From: admin@boosteam.ru";
$headers .= "Reply to admin@boosteam.ru";
mail($to, $subject, $message, $headers);
Но имя отправителя всегда одно и тоже: www-data
Как изменить имя отправителя?
Такие у меня настройки ssmtp.conf:
root=admin@boosteam.ru
rewriteDomain=boosteam.ru
mailhub=smtp.yandex.ru:465
hostname=boosteam.ru
UseTLS=YES
AuthUser=admin@boosteam.ru
AuthPass=*******
FromLineOverride=YES
revaliases:
root:admin@boosteam.ru:smtp.yandex.ru:465
UserUbuntu:admin@boosteam.ru:smtp.yandex.ru:465
www-data:admin@boosteam.ru:smtp.yandex.ru:465
В php.ini:
sendmail_path = /usr/sbin/ssmtp -t
Я разделяю проблему на две части, нужно последовательно проверить следующее:
1. Ошибка на стороне PHP при подготовке писемПосмотрим какие письма отправляются (нас в данном случае интересует поле From:
).
Для этого в командной строке создадим файл /var/tmp/dump.sh
, который будет дампить все письма, которые должны приходить MTA в файл /var/tmp/mail.eml
. Этот файл будет содержать текст последнего отправленого письма.
tee /var/tmp/dump.sh > /dev/null <<\EOF
#!/bin/bash
cat - > /var/tmp/mail.eml
EOF
chmod 775 /var/tmp/dump.sh
Затем временно заменим в php.ini
MTA:
sendmail_path = /var/tmp/dump.sh
Теперь нужно перезапустить веб-сервер (для cli-варианта этого делать не нужно) и отправить пробное письмо из PHP. Его текст можно получить так:
cat /var/tmp/mail.eml
Будет что-то похожее на это:
To: yyyyyyyy@site.ru
Subject: =?windows-1251?B?zvLx8/Lx8uLz5fIg4vvj8PPn6uA=?=
X-PHP-Originating-Script: 509:tools.php
From: XXXX <xxxxxxxx@site.ru>
Reply-To: xxxxxxxx@size.ru
...
Тут сразу можно выяснить правильность заголовка From:
. Если заголовок верный, значит проблема на стороне MTA.
Замечание. Выяснить, какие php.ini
используется можно так:
php --ini
phpinfo();
в скриптеВначале стоит убедиться, что используется именно тот MTA:
sudo netstat -ntlp | grep 25
Получится что-то похожее:
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3483/exim4
tcp6 0 0 ::1:25 :::* LISTEN 3483/exim4
Обычно сразу пишется название запущенной программы (тут - exim). Если нет, ее можно выяснить по PID
: sudo cat /proc/3483/cmdline
Пакет в Debian больше не поддерживается
Поправить файл ssmtp.conf
:
sendmail_path = /usr/sbin/ssmtp -t -fname
- можно указать отправителя через -fname
, но это будет работать только если не указывать в письме поле From:
- не наш случай/etc/ssmtp/revaliases
можно определить алиасы (для веба почта отправляется от пользователя, под которым запущен PHP, обычно это www-data
) - не наш случай, так как включен FromLineOverride=YES
FromLineOverride=YES
(по-умолчанию опция закоментирована через #
) - эта опция заставляет в качестве отправителя использовать заголовок From:
, который был сформирован в PHP.После изменения конфига необходимо перегрузить демона.
Exim может переписывать заголовки. Так можно проверить поведение правил перезаписи:
exim -brw ph10@exim.workshop.example
Исправляется в секции begin rewrite
. Обычно конфигурация находится в /etc/exim/exim.conf
. Более подробно - в документации
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
как можно получить id пользователя, который не писал в чат боту, и имея только его @username, либо имея его id, который прислал другой пользователь...