Честные рассылки через PDD.Yandex, как не попасть в спам
Предупреждение
Тех. поддержка яндекса настоятельно рекомендует не использовать их ящики для рассылок. Если у вас не очень много подписчков (до 10000) то по чуть-чуть вполне можно использовать.
Основы
Нужно понимать, что спама в электронной почте много и все ему противодействуют.
Поэтому есть SPF (Sender Policy Framework) и DKIM (DomainKeys Identified Mail). Первый определяет, какие почтовые сервера могут использовать домен, без этой записи, вся почта с вашего домена будет считаться недоверенной.
DKIM более продвинутый метод проверки, каждое письмо будет подписано ЭЦП. То есть достоверно отправлено с вашего сервера и было подписано внутри него.
Далее для рассылок нужно понимать, что используя почту для доменов нужно поддерживать лимиты рассылки, за одно соединение нельзя отправлять более 35 писем, поэтому в скрипте надо будет разрывать соединение.
Также я заметил, что нужно делать перерывы между отправкой писем. Используя перерыв в 1 секунду между письмами и в 10 секунд между соединениями, я смог отправить более 2000 писем за один день. Дальше нужно ждать 24 часа, возможно если использовать большие промежутки времени, вы сможете отправить и больше, но предел будет 3000 для яндекса.
Настроим DNS
Вы должны добавить записи в DNS вашего домена.
https://yandex.ru/support/pdd/records.xml
Данные для яндекса можно найти у них на странице. Вообще, по-хорошему, это должно было быть настроено, когда вы привязывали домен.
Если вы пользуетесь DNS от яндекса, то DKIM будет уже настроен для него при привязке почты.
Если же нет, информация по настройки есть тут - https://yandex.ru/support/pdd/additional/dkim.xml
Копипасть полную инфу не буду, но дам подсказку, в поле хост надо писать именно "mail._domainkey" (без кавычек) и никак иначе.
Для всех настроек DNS нужно ждать 24 часа. Потом можно отправить любое письмо на test@allaboutspam.com обратным письмом придет ссылка на анализ вашего письма. Будут показаны все проблемы, работает ли у вас DKIM, SPF и т.д.
Заголовки
Существуют обязательные заголовки для рассылок. Приведу пример того, как я это использовал в SwiftMail:
$headers = $swift_message->getHeaders(); $headers->addTextHeader('Precedence', 'bulk');
Выше описан заголовок того, что это рассылка. Он одинаковый в каждом письме.
Вы должны отправлять заголовок с тем, как отписаться от вашей рассылки, я использовал для него ссылку для отписки, она должна быть у каждого своя (со своим кодом проверки и т.д.) Это мы заносим в наш цикл, где идет рассылка
$list = $swift_message->getHeaders()->get('List-Unsubscribe'); $list->setValue('<'.$link.'>')
Каждые 30-35 запросов рвем соединение и ждем:
$transport->stop(); echo "transport sleep\r\n"; sleep(10); $transport->start();
Немного помогу с подключением и заданием самих сообщений это все задаём один раз:
$transport = Swift_SmtpTransport::newInstance('smtp.yandex.ru', 465,'ssl') ->setUsername('почта@домен') ->setPassword('пароль');
$swift_message = Swift_Message::newInstance() ->setReplyTo($ class=sc_keyword>from,'PushAll - Напоминание') ->setFrom($ class=sc_keyword>from,'PushAll - Напоминание') ->setSubject($subject) ->setReturnPath($ class=sc_keyword>from);
Шлем по одному в цикле, это используем каждый раз
$swift_message->setTo($email); $swift_mailer->send($swift_message,$failedRecipients);
Подключаемся, задаем сообщение, основной заголовок и в цикле задаем ссылку на отписку и разные письма и разные email для разных людей. Между отправками ждем 1-2 секунды, можно и больше, чем больше тем лучше. Думаю сами соберете пазл :)В письмо должно быть указано также:
- Почему этот человек получил письмо (например, потому что он был зарегистрирован) Для полноты требуется время подписки, айпи подписки и т.д. но я этим принебрег.
- Указана та же самая ссылка на отписку.
- Никаких кратких ссылок, все ссылки должны работать и видны, также не приветствуются длинные ссылки.
Основное перечислил, но общий свод правил можно прочитать в помощи яндекса - https://yandex.ru/support/mail/spam/honest-mailers...
Когда следует остановиться?
Если вы видите:
554 5.7.1 Message rejected under suspicion of SPAM
То ждите 24 часа и продолжайте. Учитывайте это в коде своего рассылочного скрипта. Процесс переноса пользователя из списка "Кому еще надо отправить" и "Отправлено" должен идти именно после отправки письма, и желательно делать это сразу в БД. К примеру, я использую для этого redis.
Не пытайтесь снова отправить сообщение до прошествия 24 часов, иначе счетчик сбросится и придется ждать еще 24 часа.
Немного обезопасим себя на принимающей стороне
Зарегистрируйте свой домен в postmaster.yandex.ru , postmaster.google.com , postmaster.mail.ru. Это позволит вам поднять свой уровень доверия и узнавать о проблемах с рассылкой.
Что делать после рассылки?
Вы должны обрабатывать возвратные письма. Вам будут приходить сообщения о невозможности доставки, к примеру если такой ящик не существует. Вы должны удалить его из вашей базы. Желательно это конечно автоматизировать.
Дело в том, что принимающий сервер, в случае большого числа повторных отправок на несуществующие адреса, может внести вас в спам лист. Обязательно следите за этим.
Будьте вежливы
Письмо должно быть нейтрально, помните - пользователи могут отметить ваше письмо как спам. Не рассылайте письма тем, кто этого не хочет. Вы должны заранее брать разрешение на рассылку, и пользователь должен понимать это, а не просто нажимать "Далее-Далее".
Буду признателен, если вы поделитесь своим опытом в комментариях или скорректируете неточности, описанные в статье.