На моем сервере настроен hMailServer, который рассылает рассылку новостей по подписке. Я настроил подпись DKIM, запись SPF, явно дающую моему серверу разрешение на отправку электронной почты от имени моего домена, и даже обратную запись DNS. Мой рейтинг senderscore.org - 97. И моя почта благополучно доставляется всем моим подписчикам, кроме тех, у кого адреса Yahoo или Rocketmail. Каждое электронное письмо, которое я отправляю на эти адреса, отклоняется со следующим сообщением:
Удаленный сервер ответил: 421 4.7.0 [TSS04] Сообщения от 23.102.x.x временно отложены из-за жалоб пользователей - 4.16.55.1; видеть https://help.yahoo.com/kb/postmaster/SLN3434.html
Это сообщение является на 100% ложным и вводящим в заблуждение. Никто не жаловался на письма с этого сервера, потому что на прошлой неделе я перестал отправлять любой Адреса Yahoo / Rocketmail. И ничего временного в этом нет: вот уже две недели такая ситуация. Каждый день или два я отправляю одно пробное письмо, чтобы узнать, удалили ли они мой сервер из своего черного списка, но, увы! Такое же сообщение о недоставке. И в Yahoo буквально не с кем поговорить; у них нет никакого обслуживания клиентов, не говоря уже о технической поддержке.
Так что я решил подписаться на уведомления DMARC, чтобы узнать, чем Yahoo расстроен. Вот мой последний отчет:
<?xml version="1.0"?>
<feedback>
<report_metadata>
<org_name>Yahoo! Inc.</org_name>
<email>postmaster@dmarc.yahoo.com</email>
<report_id>1562461153.62437</report_id>
<date_range>
<begin>1562371200</begin>
<end>1562457599</end>
</date_range>
</report_metadata>
<policy_published>
<domain>mydomain.com</domain>
<adkim>r</adkim>
<aspf>r</aspf>
<p>none</p>
<pct>100</pct>
</policy_published>
<record>
<row>
<source_ip>197.96.187.217</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>mydomain.com</domain>
<result>softfail</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>197.97.112.17</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>mydomain.com</domain>
<result>softfail</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>209.85.208.178</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>gmail.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>209.85.208.41</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>gmail.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>209.85.208.43</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>gmail.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>209.85.208.47</source_ip>
<count>4</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>gmail.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>209.85.208.49</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>gmail.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>209.85.208.53</source_ip>
<count>2</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>gmail.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>209.85.208.54</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>gmail.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>209.85.215.171</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>gmail.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>54.202.181.118</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>mydomain.com</domain>
<result>softfail</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>62.4.22.164</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>mydomain.com</domain>
<result>softfail</result>
</spf>
</auth_results>
</record>
</feedback>
Первое, на что я обращаю ваше внимание, это то, что IP моего сервера (23.102.x.x) вообще не упоминается. Я понятия не имею, что это за другие серверы (например, 197.97.112.17) и почему они заставляют мой сервер попадать в черный список. В чем смысл этого отчета? Как я могу заставить Yahoo перестать возвращать мои письма?
ОБНОВИТЬ: К счастью, какой-то крошечный маленький домен где-то отправил обратно сообщение об отказе, сообщив мне, что у меня нет обратной записи DNS. И вот я подумал, что сделал! Оказалось, что я последовал неправильному совету агента службы поддержки Azure, который сказал мне настроить собственную зону DNS для x.102.23.in-addr.arpa
, а затем добавить туда запись для последнего квартета, представляющего IP-адрес моего сервера. Оглядываясь назад, я понял, что, очевидно, это не имеет смысла, потому что тогда я бы эффективно контролировал записи PTR для 255 других возможных серверов. Поэтому я повторно открыл свой билет поддержки с помощью Azure, спросив их для установки записи PTR. Если это сработает, я отправлю это как ответ.
ОБНОВЛЕНИЕ 2: Я получил поддержку от Azure, и они помогли мне настроить обратную запись DNS. Итак, теперь, когда я запускаю следующее из командной строки Linux, я получаю ожидаемый результат:
$ host 23.102.x.x
x.x.102.23.in-addr.arpa указатель имени домена mail.mydomain.com
К сожалению, Yahoo по-прежнему отклоняет почту с моего сервера. Я подписался на их цикл обратной связи и не получил от них ни одного письма. Но все мои письма на адрес Yahoo по-прежнему возвращаются с тем же ложным и вводящим в заблуждение сообщением об ошибке. Что еще можно сделать?
В вашем отчете DMARC нет ничего необычного в том, чтобы найти несколько провайдеров бесплатной почты.
Например, люди, получающие от вас почту на свой адрес Google, могут выбрать пересылку вашей почты в Yahoo, в результате чего Yahoo вернет вам эти квитанции. В отчете есть подсказка - проверка SPF прошла успешно. gmail.com
. Если отчет не включал эту информацию, вы все равно могли бы догадаться на основе информации whois для IP-адреса - он передан Google.
В «Никто не жаловался» часть заставляет меня подозревать, что вы не настроили Обратная связь с Yahoo - о жалобах расскажут только после того, как вы подпишете письмо и явным образом согласитесь. Вы узнали бы об этом, если бы полностью прочитали справочные страницы, упомянутые в сообщении об ошибке, поэтому есть вероятность, что Yahoo откладывает ваше сообщение на основании какого-либо другого элемента в своем списке «лучших практик». Так это ваш лучший способ решить проблему - убедиться, что вы поняли и реализовали каждый пункт в этом списке.
Итак, счастливый конец моей истории состоит в том, что пара недели после правильной настройки моей обратной записи PTR (с помощью службы поддержки Azure) Yahoo начал получать сообщение. Заметьте, это не было мгновенным; все началось с того, что несколько подписчиков сообщили о возобновлении работы их электронной почты. Но все равно большая часть писем была отклонена. Затем медленно, медленно процент успешных поставок увеличивался, пока после переходного периода продолжительностью около двух дней отскоки не прекратились полностью.
Таким образом, ответ заключался в том, чтобы настроить обратную запись DNS ... и Подождите.