В WordPress 6.9 письма доставляются надежнее (SPF/DMARC)
21 ноября 2025
В WordPress 6.9 отправка писем стала надежнее: исправлен Envelope-From, сброс кодировок PHPMailer и корректная обработка multipart. Это повышает доставляемость и снижает отказы по SPF/DMARC без дополнительных плагинов.
TL;DR
- Envelope-From (Return-Path/MAIL FROM) теперь задаётся предсказуемо и расширяемо, что улучшает прохождение SPF/DMARC.
- PHPMailer больше не «переносит» кодировки между письмами в одном запросе.
- Исправлен 17‑летний баг с Content-Type для multipart: границы и заголовки формируются корректно.
- Меньше необходимости в обходных плагинах и хаке через phpmailer_init — достаточно фильтра wp_mail_from.
Почему это важно
Ключ к доставляемости — соответствие протоколам аутентификации. SPF проверяет домен Envelope-From, а DMARC требует, чтобы домен в From был выровнен по SPF и/или DKIM. Ранее сервер исходящей почты часто подставлял технический адрес вроде www@node-14-dc3.example.com, что нарушало SPF/DMARC-выравнивание и приводило к отказам доставки или попаданию в спам. Кроме того, ошибки в формировании multipart и «утекающая» кодировка портили сообщения и их читаемость.
Что изменилось в WordPress 6.9
1) Предсказуемый Envelope-From
Теперь WordPress определяет адрес отправителя так:
- Если присутствует заголовок From — используется его адрес и как From, и как Envelope-From.
- Иначе — по умолчанию задаётся wordpress@home_url().
Плагины могут скорректировать Envelope-From через фильтр wp_mail_from, если вы вычисляете адрес из настроек магазина, мультисайта или внешнего SMTP. Это устраняет прежние случаи, когда сервер подставлял случайный системный адрес, ломающий SPF/DMARC.
Практический эффект: письма с вашего сайта реже отклоняются, уведомления о недоставке (bounce) приходят на ожидаемый ящик, а политика DMARC можно применять жёстче без страха массовых отказов.
2) Сброс кодировок между отправками
wp_mail() использует глобальный объект $phpmailer. Раньше его внутреннее состояние кодировок могло «переезжать» из одного письма в следующее внутри одного PHP‑запроса. В 6.9 перед отправкой кодировка сбрасывается, и PHPMailer заново определяет её по контенту и настройкам. Это исправляет странности с чтением HTML/UTF‑8 после отправки текстового письма и наоборот.
3) Корректный Content-Type для multipart
Исправлен давний дефект, когда WordPress в ряде случаев передавал PHPMailer испорченный Content-Type для multipart‑сообщений. Это могло приводить к дублирующемуся заголовку или порче границ, из‑за чего вложения и альтернативные части (text/plain + text/html) отображались неверно. Теперь WordPress полагается на встроенную логику PHPMailer и не переопределяет заголовок вручную.
Кому важно отреагировать
- Сайты, использующие внешние SMTP/API (почтовые сервисы, транзакционные провайдеры): проверьте домен Envelope-From и SPF/DMARC-выравнивание.
- Инсталляции, где раньше применяли обходные пути через phpmailer_init или плагины для Return-Path: возможно, эти костыли больше не нужны.
- Мультисайты и проекты с доменами для почты, отличными от домена сайта: настройте фильтр wp_mail_from.
Практика для администраторов: чек‑лист доставляемости
- Выберите домен отправителя. Желательно поддомен типа mail.example.com или bounce.example.com, принадлежащий вашему бренду.
- Согласуйте From и Envelope-From. В идеале — один и тот же домен. Это упрощает DMARC-выравнивание.
- Обновите DNS: SPF (включите ваш отправляющий сервис/сервер), DKIM (ключи от почтового провайдера), DMARC (например, p=quarantine или p=reject с адресом для отчётов).
- Проверьте обратный адрес для bounce-сообщений: почтовый ящик должен существовать или корректно обрабатываться вашим провайдером.
- Сделайте тесты отправки: обычный текст, HTML, письмо с вложением, многоязычное содержимое (UTF‑8), чтобы убедиться, что кодировка и multipart корректны.
- Посмотрите заголовки тестового письма в клиенте: From, Return-Path, SPF, DKIM‑подпись, результат DMARC.
Практика для разработчиков плагинов и тем
- Предпочитайте фильтр wp_mail_from (и при необходимости wp_mail_from_name) вместо прямых манипуляций $phpmailer через phpmailer_init.
- Не навязывайте вручную Content-Type для multipart: доверьте это PHPMailer.
- Избегайте хранения состояния кодировок и заголовков между отправками в рамках одного запроса.
- Добавьте автотесты на отправку: plain text, text/html, multipart/alternative + вложения; проверьте корректность границ и отсутствие дубликатов заголовков.
// Минимальная настройка адреса отправителя через фильтры
add_filter( 'wp_mail_from', function( $from ) {
return 'no-reply@example.com';
} );
add_filter( 'wp_mail_from_name', function( $name ) {
return 'Example Store';
} );
// Тестовая отправка с разными частями
wp_mail(
'you@example.com',
'Тест WordPress 6.9: multipart и UTF‑8',
"Привет, это текстовая часть. Юникод: ✓",
array( 'Content-Type: text/plain; charset=UTF-8' ),
array()
);
Совместимость и типичные сценарии
- Если ваш SMTP-плагин раньше выставлял Return-Path через phpmailer_init, проверьте, не происходит ли теперь двойная подмена. В большинстве случаев хватит wp_mail_from.
- Сайты на поддоменах, шлющие письма от корневого домена, должны обеспечить выравнивание: SPF для Envelope-From и/или DKIM для From.
- Хостинги, подставлявшие системный адрес отправителя, теперь меньше вмешиваются — письма станут стабильнее без нестандартных конфигов.
Итог
WordPress 6.9 делает отправку писем заметно более предсказуемой: правильный Envelope-From, чистое состояние PHPMailer и корректный multipart минимизируют отказы по SPF/DMARC и устраняют баги рендеринга. Для большинства сайтов улучшения сработают из коробки; тем, у кого сложная почтовая архитектура, достаточно тонко настроить wp_mail_from и DNS‑записи.
Source: https://make.wordpress.org/core/2025/11/18/more-reliable-email-in-wordpress-6-9/



