Отправитель письма при использовании sendmail
При отправки писем движком LiveStreet используя sendmail есть один нюанс, что отправителем письма (Return-Path) является какой-нибудь nobody@localhost или www-data@localhost или ещё что-то в подобном духе. (всё зависит от настроек сервера, но при виртуальном хостинге возможность исправить настройки сервера отсутствуют).
Изза чего письма могут оседать на некоторых спам фильтрах. или в некоторых webmailах или почтовых программах высвечиваться типа ваш@мейл On Behalf Of: nobody@localhost, что в принципе не кошерно.
Решение проблемы достаточно простое. (я думаю этот момент стоит внести в штатную сборку LiveStreet)
в файле engine/modules/mail/Mail.class.php
176 строка файла
в функции Init() находим
и добавляем
т.е. вот так выглядить функция после исправлений
Изза чего письма могут оседать на некоторых спам фильтрах. или в некоторых webmailах или почтовых программах высвечиваться типа ваш@мейл On Behalf Of: nobody@localhost, что в принципе не кошерно.
Решение проблемы достаточно простое. (я думаю этот момент стоит внести в штатную сборку LiveStreet)
в файле engine/modules/mail/Mail.class.php
176 строка файла
в функции Init() находим
$this->oMailer->From=$this->sFrom;
и добавляем
$this->oMailer->Sender=$this->sFrom;
т.е. вот так выглядить функция после исправлений
public function Init() { /** * Настройки SMTP сервера для отправки писем */ $this->sHost = Config::Get('sys.mail.smtp.host'); $this->iPort = Config::Get('sys.mail.smtp.port'); $this->sUsername = Config::Get('sys.mail.smtp.user'); $this->sPassword = Config::Get('sys.mail.smtp.password'); $this->bSmtpAuth = Config::Get('sys.mail.smtp.auth'); $this->sSmtpSecure = Config::Get('sys.mail.smtp.secure'); /** * Метод отправки почты */ $this->sMailerType=Config::Get('sys.mail.type'); /** * Кодировка писем */ $this->sCharSet=Config::Get('sys.mail.charset'); /** * Мыло от кого отправляется вся почта */ $this->sFrom=Config::Get('sys.mail.from_email'); /** * Имя от кого отправляется вся почта */ $this->sFromName=Config::Get('sys.mail.from_name'); /** * Создаём объект phpMailer и устанвливаем ему необходимые настройки */ $this->oMailer = new phpmailer(); $this->oMailer->Host=$this->sHost; $this->oMailer->Port=$this->iPort; $this->oMailer->Username=$this->sUsername; $this->oMailer->Password=$this->sPassword; $this->oMailer->SMTPAuth=$this->bSmtpAuth; $this->oMailer->SMTPSecure=$this->sSmtpSecure; $this->oMailer->Mailer=$this->sMailerType; $this->oMailer->WordWrap=$this->iWordWrap; $this->oMailer->CharSet=$this->sCharSet; $this->oMailer->From=$this->sFrom; $this->oMailer->Sender=$this->sFrom; // 176 строка. фиксит return-path $this->oMailer->FromName=$this->sFromName; }
16 комментариев
я, например, не очень понимаю, о чем это:
поскольку отправителем является адрес, указанный в конфиге (прошу сильно не бить, если не прав. Вот в чем в чем, а в работе почтовых серверов я вообще профан)
Это именно то, что видит получатель письма непросредственно от кого оно отправлено.
Return-path как правило содержит непосредственно адрес, кто осуществил отправку.
в данном примере подразумевается, что работает некий апач сервер с правами nobody и письмо отправлялось через sendmail локально с сервера. из чего в данном примере получился адрес отправителя nobody@localhost (вместо localhost может бытьт любое другое название, котороым был назван сервер и не факт, что оно будет корректным).
в случае если у вас на сайте есть регистрации на несуществующие адреса или адреса, которые блокируют доставление ваших писем, то при наличии некорректного заголовка return-path вы даже и не узнаете, что там у вас просиходит. т.к. отбивки писем вы не получите. если же сервер отправитель правельно выставит ваш адрес в заголовок return-path, то при ошибке доставки письма, он отбивку доставит к вам на мейл и вы уже будете знать, что у ваших пользователей есть проблемы с получением писем с вашего сайта. Как правило такие письма отбивки содержат и причину по которой письмо небыло доставлено.
а по поводу факторов влияющих на доставку писем расписать в комментариях особо не получится т.к. этих факторов как минимум на целую статью.
письмо приходит с указанного адреса и от указанного сайта. Отбивку при некорректной отправке я получаю. Лично столкнулся с попаданием письма в спам только один раз, когда запрашивал восстановление пароля (яндекс почему-то его в спам отправил), но читал здесь на сайте, что проблема такая есть.
Я правильно понял, что несмотря на установку почта уходит от некого www-data@localhost (у меня скорее всего такое имя) и если какой-либо почтовик глюканет, то он его поэтому может в спам сбросить?
или нет, не так, если я поставил этот фикс, это не повредит текущему положению дел?
Отсутствие DKIM и SPF — тоже, само по себе в спам не отправит, хотя и то и другое конечно полезно, а второе ещё и очень просто сделать.
Что отправит в спам однозначно — неправильно настроенный reverse DNS.
Суммируя — чтобы почта в спам не попадала, в подавляющем большенстве случаев, достаточно сделать две реально простые вещи — разобраться с reverse DNS и прописать SPF.
С обычными провайдерами сложнее. Некоторые игнорируют такие запросы.