Недавно мы настраивали SMTP-сервер для нашего проекта ShopPoints. Вопрос стоял так: что нужно сделать, чтобы письма, отправленные нашим пользователям, не попадали в папку со спамом или попадали туда как можно реже?
Было найдено несколько интересных и полезных статей на эту тему (ссылки в конце статьи), на основе которых и было всё сделано в итоге. Но получив сегодня утром очередную порцию рассылки от достаточно известных русскоязычных ресурсов и увидев, что они пренебрегают описанными правилами, я решил кратко и в одном месте собрать все действия, которых достаточно для решения проблемы. Надеюсь, что после этого количество сайтов, отправляющих почту как надо, возрастет.
Приведенные советы актуальны только если вы используете свой собственный SMTP-сервер. При использовании, например, SMTP сервера Google всё уже сделано за нас. Как правило. В любом случае рекомендую проверить (см. подразделы Как проверить?).
Пункты расположены по степени значимости. Лучше не приступать к следующему, не завершив предыдущий.
Пропишите Reverse DNS
Название говорит само за себя. Reverse DNS lookup — процедура обратная DNS lookup. По IP адресу мы, а точнее почтовый сервер пользователя, получаем доменное имя. Если он совпадает с доменным именем в поле From, отправляемого письма, то всё в порядке.
Как сделать?
В большинстве случаев вы сами не сможете это сделать, если не являетесь владельцем диапазона IP-адресов. Поэтому единственный способ сделать данную настройку — попросить сделать это вашего
Как проверить?
Используйте любой из online-сервисов Reverse DNS lookup. Например, этот. Достаточно ввести IP-адрес сервера, с которого производится отправка почты. Если в результате отображается ваш домен, то всё в порядке.
Настройте DomainKeys
DomainKeys Identified Mail (DKIM) — метод, позволяющий убедиться, что почта отправлена тем, кто имеет на это право. По сути это протокол цифровой подписи письма.
Как сделать?
Рекомендую воспользоваться очень удобным сервисом, который автоматически генерирует пару ключей и описывает, что необходимо сделать по шагам.
Если нет желания доверять свой приватный ключ внешнему сервису, то можно воспользоваться OpenSSL:
openssl genrsa -out private.pem 1024
openssl rsa -pubout -in private.pem -out public.pem
В любом случае дальнейшие шаги следующие:
- Настроить ваш SMTP-сервер.
- Прописать две записи в DNS.
Для настройки SMTP-сервера необходимо, чтобы собственно сервер поддерживал DKIM и указать путь к приватному ключу в его настройках.
Если вы хотите делать подпись в своем коде, то скорее всего, придется найти библиотеку, поддерживающую DKIM при работе по SMTP.
В DNS своего домена теперь надо прописать две TXT-записи:
_domainkey.example.com. TXT "t=s; o=~;"
mail._domainkey.example.com. TXT "k=rsa; t=s; p={REPLACE_WITH_PUBLIC_KEY_CONTENT}"
mail — это селектор DomainKeys. По факту может быть любым идентификатором, но должен совпадать с тем, что указан в настройках DKIM SMTP-сервера.
Как проверить?
Отправьте почту через ваш сервис на любой GMail-аккаунт. Откройте полученное письмо и выберите в меню действий пункт Show Original.
Если вы найдете следующую строчку, то всё в порядке:
Authentication-Results: ... dkim=pass
Настройте DNS записи SPF
Sender Policy Framework — система, позволяющая указывать IP-адреса, с которых разрешена отправка в DNS-записях домена.
Как сделать?
Подробное описание синтаксиса доступно здесь.
В большинстве случаев достаточно следующей записи:
example.com. TXT v=spf1 a mx ~all
Эта запись говорит о том, что почту можно отправлять с любого IP, указанного в записях A (AAAA) и MX данного домена и только с них.
Как проверить?
Отправьте почту через ваш сервис на любой GMail-аккаунт. Откройте полученное письмо и выберите в меню действий пункт Show Original.
Если вы найдете следующие строчки, то всё в порядке:
Received-SPF: pass
Authentication-Results: ... spf=pass
Итого
Описанные действия должны значительно уменьшить вероятность попадания ваших писем в спам. Все остальные приемы связаны с содержимым письма или с тем как на него реагируют пользователи (часто ли они помечают ваше сообщение как спам?). Но это уже отдельная история.
Ссылки
So You'd Like to Send Some Email (Through Code)
DKIM — это просто
SPF Record Syntax
Автор: alexeyb