четверг, 14 августа 2014 г.

Эл.почта: Проходождение спам фильтров

Возник вопрос по почтовым рассылкам, клиент делает рассылку, но часть респондентов жалуются, что письма попадают в спам. В рамках этого вопроса развернулась борьба за честность имени и повышения количества доставляемых сообщений по эл.почте.
Какой-то вменяемой аналитики и истории создания и развития рассылки добиться не удалось, сложно сказать сколько человек жалуются на попадание в спам, с какого момента это началось и в чем может быть дело. В этой связи работы начали с низкого уровня - причесать рассылку к такому виду, чтобы проходить спам-фильтры основных известных почтовых сервисов. Расчет на то, что гиганты  эл.почты имеют более жесткие и продвинутые системы фильтрации. Пройду их фильтрацию, то более мелкие тоже должны пройти. Экзотические частные сервера придется решать отдельным порядком по факту возникновения проблем.
Исходные данные:
1. Домен привязан к почте gmail.com, пользователи работают через веб-интерфейс
2. Рассылка ведется с выделенного сервера через самописный веб-сервис (php + ubuntu + sendmail)


Изучение рекомендаций и спецификаций почтовых сервисов дало перечень основных пунктов.

SPF (Sender Policy Framework)

Запись SPF является разновидностью записи DNS. Она определяет почтовые серверы, которым разрешено отправлять электронную почту от имени домена.
Запись SPF предотвращает рассылку распространителями спама сообщений с поддельными адресами отправителей, относящимися к определенному домену. Получатель может проверить запись SPF, чтобы определить, было ли сообщение, предположительно отправленное из вашего домена, отосланным авторизованным почтовым сервером.
Идем в настройки домена и добавляем соответствующую запись:

 v=spf1 include:_spf.google.com ~all

Мы используем больше одного почтового сервера для отправки писем (пользовательский gmail и служебный Sendmail), поэтому требуется дополнить запись вторым сервером. Дописываем адрес сервера в строку(вместо х.x.х.х - ip адрес своего сервера):

v=spf1 ip4:x.x.x.x include:_spf.google.com ~all

DKIM (DomainKeys Identified Mail)
Что это и как работает популярно описано в wiki. Суть та же - идентифицировать отправителя письма, что это не кто попало прикинулся хорошим и прикрылся нашим адресом. Технология использует ключи, поэтому настройка чуть сложнее.
Создаем приватный ключ на почтовом сервере. В админке gmail есть соответствующие настройки, а для собственного сервера настройки делаются ручками. Второй публичный ключик вставляем в txt запись домена mail._domainkey:

v=DKIM1;k=rsat=s;p=здесь открытый ключ
После репликации DNS проверяем работоспособность. Из консоли команда:

$ dig mail._domainkey.mysite.ru TXT

Так же в письмах отправляемых с подписанного сервера можно в заголовках увидеть статус - подписано.


DMARC (Domain-based Message Authentication, Reporting and Conformance)  Идентификация сообщений, создание отчетов и определение соответствия по доменному имени. Гугл рекомендует после настройки SPF и DKIM настроить DMARC. Эта технология позволит следить за отправляемыми письмами от валидного сервера или "чужого".
Есть возможность сразу фильтровать письма не прошедшие проверку, тем самым ограничить доставку не желательной почты от имени нашего домена. А так же получать ежедневные отчеты на указанный ящик. Все настройки задаются через параметры указываемые в строке. Что делать с подозрительными письмами, какой процент подозрительных помечать как спам, куда слать отчеты. Подробнее можно ознакомиться в документации.
Добавляем запись в домен (я указал пока щадящий режим, чтобы ничего не фильтровалось, но все попадало в ежедневный отчет):

_dmarc.mysite.ru IN TXT

v=DMARC1; p=none; rua=mailto:abuse@mysite.ru


list-unsubscribe

Для повышения скорости и качества работы с подпиской рекомендовано использовать технологию list-unsubscribe. В почтовых сервисах, которые ее поддерживают, отписываться от рассылки можно простым кликом на соответствующую кнопку, без переходов на сайт владельца рассылки или написаний специальных писем отписки. Хабр пишет такой рецепт:

Поместить в заголовок письма вот такую строчку:

List-Unsubscribe<mailto:rm-2h74dxau3ua1cq2cxdkebs mysite.ru>
также можно указать просто URL:

List-Unsubscribe: <//example.com/notifications/unsubscribe/fdgf9786786fejdtplasw56.html>


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

FBL
Технология получения обратной связи по действиям пользователей, спам фильтров и почтовых сервисов (пометка писем как спам). Через указанный адрес высылаются отчеты о произошедших событиях, таким образом автор рассылки может провести анализ и провести работу над ошибками, улучшить сервис.

После всех этих манипуляций письма приходящие с этого домена стали обладать строчкой "подписано: mysite.ru", а в заголовках писем появились подтверждающие записи. Дальнейшие настройки буду проводить после наблюдения и анализа логов и обратной реакции от респондентов.

Общие рекомендации к рассылкам есть в справочных разделах почтовых сервисов. Все они свобдятся к одному общему знаменателю, который хорошо перечислен в статье с хабра:
Признаки спама

Какие могут быть стандартные ошибки и как их избежать? Как спамерские, системы антиспама также распознают следующие признаки:
  • Избегайте спамерских фраз вроде «Нажми сюда!», «Получили миллион за минуту!»
  • Обилие восклицательных знаков в заголовках и в теле письма
  • Злоупотребление клавишей «CAPS LOCK» (да-да :)
  • Яркие цвета шрифтов, в частности красный, зеленый (о, да!)
  • Неправильная кодировка
  • Использование одного большого изображения вместо текстового письма — когда изображение не сопровождается минимальным количеством текста, письмо удаляется, признанное спамом
  • Использование слов «Тест», «Привет», «Проверка», «Test» в теме письма — эту ошибку допускают те, кто проводит тестовую рассылку внутри своей корпоративной почты
  • Рассылки одного письма множеству адресатов в рамках одной организации со внешнего адреса — это сложный вариант, с которым не справится никакая почтовая служба. Здесь всё зависит только от системного администратора компании
  • Кривое форматирование — не копируйте текст из Microsoft Word прямо в почту, текст из Word в формате HTML не будет отображаться правильно. В частности, это касается кавычек, троеточия. Можно использовать при отправке писем вариант с простым форматированием (например, в Gmail) — обычный HTML-ввод. Правда, в этом случае также пропадёт всё форматирование и, главное, ссылки
  • Отправка слишком большого количества писем в сутки. Большинство почтовых служб не позволяют отправлять более 200 писем в сутки (с такими темпами рассылка на 50 000 адресов может и затянуться :). Кроме того, если вы арендуете сервер у shared-хостинга, они легко могут отключить аккаунт просто увидев необычный всплеск трафика. Если же у вас выделенный сервис, то администрация хостера будет реагировать только на жалобы.
  • Наше ноу-хау — мы прогоняем все письма перед отправкой рассылки через SpamAssassin, проверяя степень его «спамовости». Если она превышает определённый порог, то рассылки не пропускаем и предлагаем клиенту рекомендации по его переделке. В будущем планируем прикрутить этот сервис онлайн, тогда рекомендации будут выдаваться прямо при загрузке письма. Пример такого сервиса.
Бесплатный spam-check

Рекомендации по ведению рассылки от почтовых сервисов:
- google.com
- mail.ru

Проверить свой домен на участие в черных списках и спам листах можно на сайтах сервисов:
http://mxtoolbox.com/SuperTool.aspx
https://postmaster.mail.ru
http://www.ip-ping.ru/dnsbl/
http://ru.smart-ip.net/spam-check

Полезные ссылки:
краткая теория про DNS
howto (dkim, spf, sendmail, ubuntu)