У меня на сервере такая проблема:
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
Я надеюсь, что вы можете помочь мне
Спасибо
Давайте разберемся в этом, поскольку здесь на вас работают несколько разных компонентов.
Если я правильно понимаю, все электронные письма имеют адрес электронной почты @ 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 и открытый ключ (и, возможно, флаг тестирования). Кроме того, флаг тестирования установлен с помощью "т = у"иначе у вас возникнут проблемы.
Поскольку мы все еще тестируем это, я добавлю тест флаг, но обязательно удалите его, когда все заработает.
Для тестирования
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, избавьтесь от них.
Не зная ваших доменов, я не могу проверить ваши а и mx записи через DNS. Но поскольку у вас есть большое количество перечисленных элементов IPv4, я бы упростил записи SPF до чего-то вроде этого.
Для тестирования
com.example. TXT "v = spf1 ip4: [IP-адрес сервера, отправляющего электронные письма] ip4: [IP-адрес server.example2.com.mx] ~ all"
Для производства (отклонение сообщений не с ваших серверов)
com.example. 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;"