Борьба с попаданием автоматических писем с сайта в спам [ЧАСТИЧНОЕ РЕШЕНИЕ]

Потратил кучу времени на решение проблемы, а именно письма-оповещения с сайта попадали в СПАМ, особенно остро стояла проблема с Google. На данный момент я смог побороть этот недуг и хочу поделиться с вами своим решением.



Дисклеймер
Почта и домен работают через Яндекс, но думаю решение поможет и тем, кто хочет напрямую через свой сервер гонять.

1. Убедитесь, что IP хостера, где находится ваш сайт нет в СПАМ-базах.
Проверить это можно сделать: xseo.in/dnsbl и ru.smart-ip.net/spam-check
Если IP в базе нет, то действуйте дальше, если есть стучите хостеру, пусть решает проблему.

2. Настройка DKIM и SPF, важно и нужно. Если вы будите гонять почту через Яндекс, Google или Mail.ru, то они предоставят вам всю инфу и вы в панели управления, сможете без труда прикрутить DKIM и SPF. Если же гоняете через свой севрер, то DKIM можно сгенерировать тут: dkimcore.org/tools/keys.html дальше по всё тем же инструкциям прикручиваете его.
Что делать с SPF читаем тут: habrahabr.ru/post/143951/ про DKIM там тоже есть.

3. Настраиваем class.phpmailer.php (/engine/lib/external/phpMailer/). В принципе, если 1 и 2 выполнены грамотно, то можно его не трогать, но если хотите, чтоб всё было красиво, то идём в него.
Начиная с 281 по 308 строчку, вам надо кое что дополнить:

 /**
   * Used with DKIM DNS Resource Record
   * @var string
   */
  public $DKIM_selector   = 'default';

  /**
   * Used with DKIM DNS Resource Record
   * optional, in format of email address 'you@yourdomain.com'
   * @var string
   */
  public $DKIM_identity   = 'email@name-domain.ru';

  /**
   * Used with DKIM DNS Resource Record
   * @var string
   */
  public $DKIM_passphrase   = 'если есть, генератор его не даёт, можно оставить пустым';

  /**
   * Used with DKIM DNS Resource Record
   * optional, in format of email address 'you@yourdomain.com'
   * @var string
   */
  public $DKIM_domain     = 'name-domain.ru';

  /**
   * Used with DKIM DNS Resource Record
   * optional, in format of email address 'you@yourdomain.com'
   * @var string
   */
  public $DKIM_private    = 'DKIM ключ который вы сгенерировали для домена ';


В заключение, я поменял метод кодирования с 8bit на base64 в 69 строке. Мне он больше нравится.

P.S.: ЗАБЫЛ!
Рекомендую создать отдельный почтовый адрес для таких рассылок noreply@name-domain.ru
Затем поменять шаблоны авто-писем (/templates/skin/шаблон/notify/russian), убрать лишние ссылки и привести их к общим требованиям Google, да и других ПС/почтовых служб support.google.com/mail/answer/81126?hl=ru

P.P.S: ДОПОЛНЕНИЯ

Никто не пытался обновить PHPMailer до актуальной версии? github.com/Synchro/PHPMailer/

Все эти методики не дадут и 50% гарантии попадания писем в inbox, так как у Google, да и многих других сервисов есть важные требования: отписка в 1-2 клика прямо из письма, List-Unsubscribe и т.д. Жду ваши методики, как не стать спамером :)

Надеюсь, щас придут специалисты и меня поправят, где я не прав.

24 комментария

avatar
Вы, однако, самое основное не упомянули: reverse DNS, без правильной настройки которого не будет работать ничего. В том числе и SPF с DKIM. Из моей практики reverse DNS — причина проблемы в 95% случаев. Из моей же практики отсутствие DKIM не являлось причиной проблемы никогда. Хотя, вещь, конечно, полезная. DKIM вообще, не очень простая штука в настройке (зависит от того что за MTA используется на сервере), ну и ресурсов сервера некоторых стоит.
avatar
Про Reverse DNS я не писал, так как не все админы и не каждый сам сможет настроить.
К тому же на шаред-хостинге его вам вряд ли будут настраивать.
В целом, вы правы, но после внесённых выше указанных изменений количество уходящих в спам стало меньше.

Про Reverse DNS на Хабре тоже написано: habrahabr.ru/post/143951/ кому интересно читайте)
avatar
Ну… я лично с шаред-хостингом дела никогда не имел, поэтому судить не берусь. Но, IMHO, если хостер не может или не хочет помочь вам Reverse DNS настроить, то хостинг надо немедленно менять. Вообще у нормальных хостеров это функциея в админке, основная проблема с которой — сайто-владельцы просто не знают что это, и чего с этим делать :)
avatar
Большинство хостеров используют один 1 на сервер, все сайты клиентов под ним. Щас ради эксперимента попробую подать запрос хостеру.
avatar
Как я и говорил, лесом шлют.
Нельзя к сожалению.
Так можно сделать при нескольких условиях:
1. Вы покупаете выделенный IP
2. Необходимо заказать спец. аккаунт на другом сервере в другом ДЦ.
avatar
Ну… В, таком случае, в моём понимании, всё что вы шлете с этого сервера от имени своего домена — в спаме автоматом. SPF не работает принципиально.
avatar
После проделанных мной действий, количество попаданий в спам уменьшилось. Спросил у поддержки Яндекса, они сказали, что понимают проблему шаред-хостингов и просят лишь грамотно настроить DKIM и SPF в настройках панели. Mail.ru тоже.
Вот с Google сложнее, у них и требований больше.
avatar
У меня мало что попадало в спам, но иногда бывало, сейчас с DKIM вообще перестало попадать в мусор. Ящики у меня полностью на Yandex. Так что статья полезная.
avatar
Это… не понятно.

Давайте посмотрим на то, как оно работает.

Итак, мы отсылаем письмо. Вопрос — от имени какого домена? Т.е. какой домен у нас стоит в SMTP команде HELO/EHLO при отсылке письма?
Второй вопрос — что за IP у сервера который отсылает наше письмо?
Внимание: Вот для того домена который там (в HELO/EHLO) стоит должен обязательно быть прописан этот самый PTR. Причем IP там должен быть именно того сервера корый отсылает почту.

Т.е. если мы отсылаем письмо от имени mail.mysite.ru с сервера у которого IP = 111.222.333.444, то DNS записи у mail.mysite.ru категорически должены выглядеть только так:

mail.mysite.ru.	A	111.222.333.444
111.222.333.444.in-addr.arpa.	PTR	mail.mysite.ru.


Принимающая сторона возьмет домен из HELO/EHLO, возьмет IP того сервера кто шлет письмо.И проверит соответсвуют ли они друг другу в DNS.
И если нет? Ничего хорошего. это может, например, означать что кто-то левый отсылает почту от имени другого домена.

Почему без этого не работает, например, SPF?

ну вот в DNS своего сайта www.mysite.ru пропишите в SPF, что вы верите почте отправленной От имени mail.mysite.ru.
Ага. а там кто-то от этого имени с левого IP спамит. Помогло? — нет.
комментарий был удален
avatar
допустим, домен куплен у nic.ru, а сервер у linode, google SPF в настройках домена указывать, или на сервере?
avatar
Всё делается на сервере, в панели управления, либо ручками, если сервер VPS. Также не забудьте про совет Gmugra он очень дельный, особенно если выделенный IP и VPS.
avatar
может кому интересно, если будете использовать smpt google:

Google limits the amount of mail a user can send, via its portable SMTP server. This limit restricts the number of messages sent per day to 99 emails; and the restriction is automatically removed within 24 hours after the limit was reached.
avatar
Я вам больше скажу, многие шаред-хостинги ограничивают количество отправляемых писем в день.
avatar
Возможно. А есть достойные бесплатные smpt? вот нашел пока, но платно: smtp2go.com/
avatar
serversmtp.com/ тоже платный smpt сервис, но есть: FREE plan 6.000 Бесплатно писем в месяц (до 200 в день)
avatar
По мне дак проще за 5$ у Digital Ocean или за 200руб у FirstVDS сервер взять и настроить чисто под рассылки. Тогда и ограничений не будет и экспериментировать можно.
avatar
Вы правы. Но иногда имеет смысл использовать сторонние smpt, во-первых на слабых серверах это хорошо тем что, исходящая почта лишний раз не нагружает ваш сервер, во-вторых доверия к google smpt больше, чем к вашему серверу, в плане попадания писем в спам…
avatar
P.S. Google smpt: 2000 сообщений в день, support.google.com/a/answer/176600?hl=ru
avatar
Это через Google Apps, а он стоит 5$ в месяц. Но плюшек у него много, сам пользуюсь, всё радует.
avatar
там рядом есть не через google apps, 2000 сообщений. Но многие чсто испытывают трудности с подключением к их smtp, аутентификация не проходит…
avatar
тест
avatar
Помимо всего прочего, что тут упомянуто (спасибо за пост!) привожу еще одну фишку, которую можно добавить, и которой не предусмотрено в уведомлениях Livestreet — текстовая версия письма.

Я не кодер, и чтобы привинтить эту фишку, пришлось повозиться. Но нашел тут инструкцию для PHP Mailer, что в этом классе есть функция дополнительного тела письма, в виде текста — AltBody класса PHPMailer.

Пришлось также разбираться в Mail.class.php от Livestreet:
Ищем в нем строку
$this->oMailer->Body=$this->sBody;

дописываем ниже
$this->oMailer->AltBody=$this->sAltBody;

Ищем строку
$this->sBody=$sText;

дописываем ниже
$this->sAltBody=strip_tags($sText);


Все! На самом примитивном уровне — получена дополнительная текстовая версия письма.
avatar
В общем по итогам все таки пока от этой фишки отказался. Да, реально, глядя на тестовый ящик на www.mail-tester.com — действительно в письмах после этого изменения существенно поднялся балл письма (почти на 3.5 балла). Однако (может и по другим причинам) рассылка с этим изменением попала на mail.ru в спам. Поэтому не разбираясь слишком глубоко, пока от этого отказался. Будет время, протестирую более основательно!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.