Борьба с попаданием автоматических писем с сайта в спам [ЧАСТИЧНОЕ РЕШЕНИЕ]
Потратил кучу времени на решение проблемы, а именно письма-оповещения с сайта попадали в СПАМ, особенно остро стояла проблема с 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 строчку, вам надо кое что дополнить:
В заключение, я поменял метод кодирования с 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 и т.д. Жду ваши методики, как не стать спамером :)
Надеюсь, щас придут специалисты и меня поправят, где я не прав.
Дисклеймер
Почта и домен работают через Яндекс, но думаю решение поможет и тем, кто хочет напрямую через свой сервер гонять.
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: ДОПОЛНЕНИЯ
- habrahabr.ru/company/yandex/blog/189032/ — Яндекс.Почта для домена, настройка
- habrahabr.ru/post/106589/ — DKIM — это просто (общая суть)
Никто не пытался обновить PHPMailer до актуальной версии? github.com/Synchro/PHPMailer/
Все эти методики не дадут и 50% гарантии попадания писем в inbox, так как у Google, да и многих других сервисов есть важные требования: отписка в 1-2 клика прямо из письма, List-Unsubscribe и т.д. Жду ваши методики, как не стать спамером :)
Надеюсь, щас придут специалисты и меня поправят, где я не прав.
24 комментария
К тому же на шаред-хостинге его вам вряд ли будут настраивать.
В целом, вы правы, но после внесённых выше указанных изменений количество уходящих в спам стало меньше.
Про Reverse DNS на Хабре тоже написано: habrahabr.ru/post/143951/ кому интересно читайте)
Вот с Google сложнее, у них и требований больше.
Давайте посмотрим на то, как оно работает.
Итак, мы отсылаем письмо. Вопрос — от имени какого домена? Т.е. какой домен у нас стоит в SMTP команде HELO/EHLO при отсылке письма?
Второй вопрос — что за IP у сервера который отсылает наше письмо?
Внимание: Вот для того домена который там (в HELO/EHLO) стоит должен обязательно быть прописан этот самый PTR. Причем IP там должен быть именно того сервера корый отсылает почту.
Т.е. если мы отсылаем письмо от имени mail.mysite.ru с сервера у которого IP = 111.222.333.444, то DNS записи у mail.mysite.ru категорически должены выглядеть только так:
Принимающая сторона возьмет домен из HELO/EHLO, возьмет IP того сервера кто шлет письмо.И проверит соответсвуют ли они друг другу в DNS.
И если нет? Ничего хорошего. это может, например, означать что кто-то левый отсылает почту от имени другого домена.
Почему без этого не работает, например, SPF?
ну вот в DNS своего сайта www.mysite.ru пропишите в SPF, что вы верите почте отправленной От имени mail.mysite.ru.
Ага. а там кто-то от этого имени с левого IP спамит. Помогло? — нет.
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.
Я не кодер, и чтобы привинтить эту фишку, пришлось повозиться. Но нашел тут инструкцию для PHP Mailer, что в этом классе есть функция дополнительного тела письма, в виде текста — AltBody класса PHPMailer.
Пришлось также разбираться в Mail.class.php от Livestreet:
Ищем в нем строку
дописываем ниже
Ищем строку
дописываем ниже
Все! На самом примитивном уровне — получена дополнительная текстовая версия письма.