Отправитель письма при использовании 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() находим
$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 комментариев

avatar
Оседание писем от LS в спаме — давняя проблема. Если этот способ ее решает, то однозначно +
  • dsg
  • 0
avatar
на спам влияет достаточно много факторов. одним из них само собой являются правельные заголовки писем с корректной кодировкой. но по мимо всего существуют такие технологии как SPF, DKIM. которыми можно улучшить доставляемость писем. Допустим раньше наши письма на гугле всегда попадали в спам. после настройки SPF всё стало нормально. если есть желание, могу подробно описать факторы, которые влияют на прохождение писем через основные системы защиты многих почтовых решений.
avatar
могу подробно описать факторы, которые влияют на прохождение писем через основные системы защиты многих почтовых решений.
было бы не плохо

я, например, не очень понимаю, о чем это:
отправителем письма (Return-Path) является какой-нибудь nobody@localhost или www-data@localhost

поскольку отправителем является адрес, указанный в конфиге (прошу сильно не бить, если не прав. Вот в чем в чем, а в работе почтовых серверов я вообще профан)
avatar
то, что прописано в конфиге, влияет на поле заголовка From:
Это именно то, что видит получатель письма непросредственно от кого оно отправлено.
Return-path как правило содержит непосредственно адрес, кто осуществил отправку.

в данном примере подразумевается, что работает некий апач сервер с правами nobody и письмо отправлялось через sendmail локально с сервера. из чего в данном примере получился адрес отправителя nobody@localhost (вместо localhost может бытьт любое другое название, котороым был назван сервер и не факт, что оно будет корректным).

в случае если у вас на сайте есть регистрации на несуществующие адреса или адреса, которые блокируют доставление ваших писем, то при наличии некорректного заголовка return-path вы даже и не узнаете, что там у вас просиходит. т.к. отбивки писем вы не получите. если же сервер отправитель правельно выставит ваш адрес в заголовок return-path, то при ошибке доставки письма, он отбивку доставит к вам на мейл и вы уже будете знать, что у ваших пользователей есть проблемы с получением писем с вашего сайта. Как правило такие письма отбивки содержат и причину по которой письмо небыло доставлено.

а по поводу факторов влияющих на доставку писем расписать в комментариях особо не получится т.к. этих факторов как минимум на целую статью.
avatar
хм, тогда еще вопрос:
$config['sys']['mail']['type'] = 'mail';
$config['sys']['mail']['from_email'] = 'no-reply@site.ru'; 
$config['sys']['mail']['from_name'] = 'Почта сайта';

письмо приходит с указанного адреса и от указанного сайта. Отбивку при некорректной отправке я получаю. Лично столкнулся с попаданием письма в спам только один раз, когда запрашивал восстановление пароля (яндекс почему-то его в спам отправил), но читал здесь на сайте, что проблема такая есть.

Я правильно понял, что несмотря на установку
$config['sys']['mail']['from_email'] = 'no-reply@site.ru'; 
почта уходит от некого www-data@localhost (у меня скорее всего такое имя) и если какой-либо почтовик глюканет, то он его поэтому может в спам сбросить?
avatar
посмотрите исходные заголовки писем, которые присылает вам ваш сайт. самая первая строчка
avatar
Почта сайта <no-reply@site.ru>
avatar
значит у вас всё отлично. причины попадания в спам могут быть разные. это может быть совокупность нескольких правил фильтра. все спам фильтры построены по принципу скоринга. каждое правило по которому проходит письмо получает положительно или отрицательное значение. после чего если результат скоринга выше выставленного, письмо попадает в спам. такие фильтры как spamassassin допустим пишут в заголовке письма скоринг и на основании чего они его расчитали. этим самым можно письма оптимизировать для проходимости через фильтры
avatar
так а есть смысл в том фиксе, который Вы представили?
или нет, не так, если я поставил этот фикс, это не повредит текущему положению дел?
avatar
не повредит. фикс актуален в первую очередь тем, у кого заголовок выставляется не верно. у каждого хостера разные настройки. Вас я так понимаю в данном случае не касается.
avatar
Из моего опыта — Return-Path никак не влияет на попадание в спам, хотя много где об это пишут и говорят. Но если очень хочется его проще в php.ini настроить с помощью sendmail_path опции.

Отсутствие DKIM и SPF — тоже, само по себе в спам не отправит, хотя и то и другое конечно полезно, а второе ещё и очень просто сделать.

Что отправит в спам однозначно — неправильно настроенный reverse DNS.

Суммируя — чтобы почта в спам не попадала, в подавляющем большенстве случаев, достаточно сделать две реально простые вещи — разобраться с reverse DNS и прописать SPF.
avatar
разобраться с reverse DNS
Там разбираться то нечего тоже. :) У нормальных хостеров прям в панели задать можно. У других, бывает надо написать в саппорт.
С обычными провайдерами сложнее. Некоторые игнорируют такие запросы.
avatar
Угу. я и говорю поэтому — реально просто :) Правда, при условии, что знаешь о самом факте существования понятия reverse DNS, что например было моей личной проблемой в своё время :D
avatar
на самом деле факторов влияющих на попадание писем в спам достаточно много. Я на днях подготовлю информацию по фильтрации писем/попаданию в спам. в совокупности првил любая мелочь может стать решающей для попадания письма в спам.
avatar
Давайте :) Будет очень любопытно почитать :)
avatar
Спасибо огромное.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.