У меня проблема на моем сервере:
Example.com и example2.com.mx - это домены с server.example.com , когда я отправляю электронное письмо с учетной записью account@example.com в Gmail пройти и показать подписанный DKIM, но когда я пытаюсь отправить электронное письмо из php-формы в example2.com.mx с адресом электронной почты account@example.com Отказ DKIM показывает, что учетная запись используется для входа, но не подписана.
Система в example2.com.mx имеет фреймворк php и Zend 1, а server.example.com имеет WHM centos 6 и Cpanel в доменах example.com и example2.com
И Gmail возвращает это, например, в письмо с php:
dmarc = fail (p = NONE sp = NONE dis = NONE) header.from = example.com
Надеюсь, вы можете мне помочь
Спасибо: D
Давайте разберемся с этим, поскольку здесь на вас работают несколько различных компонентов.
Если я правильно понимаю, все электронные письма имеют адрес электронной почты @ example.com (независимо от того, какой сервер их отправляет), поэтому мои элементы ниже настроены для отправки с @ example.com
Кроме того, ваша настоящая проблема, похоже, связана с DKIM (поскольку вы получаете электронное письмо, просто не видите его как подписанное) . Я включаю другие вещи, которые нужно очистить, которые помогут вам в долгосрочной перспективе.
Поскольку вы заметили, что иногда вы получаете сообщения в Gmail, в которых говорится, что они подписаны DKIM, я предполагаю, что у вас есть часть селектора верна и сервер исходящей почты правильно добавляет подписи DKIM к вашим исходящим сообщениям. Проблема звучит так, будто у вас нет сервера исходящей почты для настройки веб-страницы PHP для подписи DKIM. Самый простой способ - заставить ваш веб-сервер отправлять электронную почту через тот же почтовый сервер, который вы используете для почтовых ящиков; они уже доказали, что правильно подписывают сообщения, и это позволит объединить ваш почтовый поток в единый маршрут.
Это важно, потому что DKIM - единственная часть этой настройки, которая требует от вас изменения потока почты. SPF и DMARC - это инструкции на основе DNS для принимающих серверов, в которых рассказывается, как проверять и обрабатывать поддельную почту, якобы отправленную из вашего домена. DKIM фактически изменяет почту с ваших серверов, так что есть доказательства, что она на 100% исходит от вас. Если в отправляемом электронном письме нет заголовков подписи DKIM, значит, исходящие электронные письма подписываются неправильно, и DMARC позже не сработает.
Ваши текущие записи DKIM в DNS немного большие, на самом деле похоже, что вы включаете некоторые элементы, которые предназначены для заголовков почты, а не для DNS; и у вас плохое значение для флага тестирования с "t = s". Для большей части всего, для чего вам нужен DKIM, запись DNS очень проста; например, всего 2 или 3 элемента, версия DKIM и открытый ключ (и, возможно, флаг тестирования). Кроме того, для флага тестирования установлено значение « t = y », иначе вы столкнетесь с проблемами.
Поскольку мы все еще тестируем это, я включу флаг test , но обязательно удалите его, когда все заработает.
Для тестирования
com.example._domainkey.selector TXT "v = DKIM1; t = y; p = [публичный ключ подписи DKIM]"
Для производства (удалите флаг тестирования)
com.example._domainkey.selector TXT "v = DKIM1; p = [общедоступный ключ подписи DKIM]"
Все остальное не нужно, поэтому давайте немного очистим это. Все, что делает запись DNS, - это дает всему миру копию вашего закрытого ключа, чтобы он мог проверить подпись самостоятельно. (и указывается, что этот домен все еще тестирует DKIM, поэтому не отклоняйте сообщение только потому, что оно не прошло проверку DKIM)
Записи DKIM относятся к домену в строке «От» сообщения электронной почты. Итак, если ваша почта приходит ОТ @ example.com, то будет использоваться именно DKIM.
Структура политики отправителя определяет, каким серверам разрешено отправлять электронные письма, которые утверждают, что они исходят из вашего домена. У вас есть несколько элементов, перечисленных в вашей записи SPF, которые обычно не используются в сильной настройке. Также существует общая синтаксическая ошибка: вы используете слишком много символов «+». Знак "+" перед каждым элементом не нужен. Фактически, учитывая ваши записи, вам не нужен знак «+» в ваших записях SPF, избавьтесь от них.
Не зная ваших доменов, я не могу проверить ваши a и mx записи через DNS. Но поскольку у вас в списке есть большое количество элементов IPv4, я бы упростил записи SPF до примерно следующего:
Для тестирования
com.example. TXT "v = spf1 ip4: [IP-адрес сервера, отправляющего электронные письма] ip4: [IP-адрес server.example2.com.mx] ~ all"
Для производства (отклонение сообщений не с ваших серверов)
com .пример. TXT "v = spf1 ip4: [IP-адрес сервера, отправляющего электронные письма] ip4: [IP-адрес server.example2.com.mx] -all"
У вас может быть несколько элементов ip4:, если вам нужны дополнительные IP-адреса ( больше серверов или добавленные интерфейсы на сервере).
Важной частью здесь является то, что запись TXT для SPF создается в DNS для домена , из которого поступает почта. А элементы ip4: SPF указывают IP-адреса серверов, которым будет разрешено отправлять почту. Они не обязательно должны быть серверами для одного и того же домена, но они должны быть всеми IP-адресами, которым разрешено отправлять электронную почту для этого домена.
DMARC является особенным, поскольку он не выполняет никаких функций. проверка действительности электронного письма, он просто сообщает другому серверу, как обрабатывать электронные письма, если они не проходят проверку SPF или DKIM.
Похоже, ваша запись DMARC говорит серверам никогда не отклонять и не помещать сообщения в карантин, даже если они не прошли проверку (" p = none; sp = none ") часть команды. Это хорошо для тестирования, если вы не забудете включить его на ступеньку выше, когда закончите тестирование.
Кроме того, элементы выравнивания идентификаторов DKIM и SPF записи по умолчанию установлены на «расслабленный» (рекомендуемый параметр), чтобы вы могли оставьте их, чтобы немного упростить. В остальном это выглядит неплохо.
Для тестирования
com.example._dmarc TXT "v = DMARC1; p = none; sp = none; pct = 100;"
Для производства (с жесткими отказами отказы "
com.example._dmarc TXT" v = DMARC1; p = reject; sp = reject; pct = 100; "