Настройка почты для сайта: SPF, DKIM, DMARC

Честно говоря, почтовые настройки — это одна из самых недооценённых частей веб-разработки. Я сталкивался с клиентами, которые потратили 200 тысяч на разработку сайта, а их письма из контактных форм попадают в спам.

Почему письма с сайта попадают в спам

У меня был клиент — интернет-магазин мебели. Сайт на Битрикс, всё настроено красиво, но заказы не доходили до менеджеров. Оказалось, Gmail и Яндекс.Почта складывали все уведомления в спам. Причина банальна — отсутствие SPF, DKIM и DMARC записей.

Почтовые провайдеры в 2026 году стали очень строгими. Google ужесточил требования к массовым рассылкам с февраля 2026, Yahoo последовала примеру. Теперь без правильной настройки SPF, DKIM и DMARC ваши письма имеют 70-80% шанс попасть в спам.

Основные причины попадания в спам:

⚠️
Важно знать: Если ваш сайт отправляет больше 5000 писем в день, Google и Yahoo требуют обязательной настройки DMARC с политикой "quarantine" или "reject".

Что такое SPF и как настроить

SPF (Sender Policy Framework) — это DNS-запись, которая указывает, какие серверы имеют право отправлять почту от имени вашего домена. Грубо говоря, это список "разрешённых отправителей".

На практике я настраиваю SPF в три этапа. Первый — определяю все источники отправки писем. Обычно это:

Второй этап — создание SPF записи. Вот пример для типичного сайта на Битрикс с хостингом Timeweb:

example.com. IN TXT "v=spf1 include:_spf.timeweb.ru include:_spf.google.com ip4:185.25.118.45 ~all"

Разберём по частям:

Третий этап — проверка. Я использую команду dig или онлайн-сервисы для проверки:

dig TXT example.com | grep spf

А вот реальный пример для сайта на WordPress с SendGrid:

mysite.ru. IN TXT "v=spf1 include:sendgrid.net include:_spf.reg.ru a mx ~all"
💡
Лайфхак: Используйте "~all" вместо "-all" на первое время. Это поможет избежать потери писем при неточной настройке. Через месяц можете переключиться на строгий режим.

Был случай у одного клиента — настроили SPF слишком строго с "-all", и письма от CRM-системы перестали доходить. Оказалось, CRM отправляет с дополнительного IP, который мы не учли. Пришлось экстренно исправлять.

Настройка DKIM для подписи писем

DKIM (DomainKeys Identified Mail) — это криптографическая подпись письма. Каждое исходящее письмо подписывается приватным ключом, а получатель проверяет подпись по публичному ключу из DNS.

На моей практике DKIM настраивается сложнее SPF. Во-первых, нужно генерировать пару ключей. Во-вторых, настраивать почтовый сервер для подписи. В-третьих, добавлять публичный ключ в DNS.

Для генерации ключей использую OpenSSL на сервере:

# Генерируем приватный ключ
openssl genrsa -out dkim_private.pem 2048

# Извлекаем публичный ключ
openssl rsa -in dkim_private.pem -pubout -outform PEM -out dkim_public.pem

# Конвертируем для DNS записи
cat dkim_public.pem | grep -v "BEGIN\|END" | tr -d '\n' > dkim_public_dns.txt

Затем настраиваю подпись в почтовом сервере. Если использую Postfix (стандарт на большинстве Linux-серверов), устанавливаю OpenDKIM:

# Ubuntu/Debian
apt-get install opendkim opendkim-tools

# Создаём конфигурацию
echo "Domain example.com" >> /etc/opendkim.conf
echo "KeyFile /etc/opendkim/keys/example.com/default.private" >> /etc/opendkim.conf
echo "Selector default" >> /etc/opendkim.conf

DNS запись для DKIM выглядит так:

default._domainkey.example.com. IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2K3..."

Где:

Честно говоря, на shared-хостинге самостоятельно настроить DKIM сложно. Большинство провайдеров предоставляют готовую настройку. У Timeweb, например, нужно просто включить DKIM в панели управления, и они дают готовую DNS запись.

ℹ️
Полезно знать: Для WordPress есть плагин WP Mail SMTP, который может настроить DKIM автоматически при использовании внешних SMTP-сервисов типа SendGrid или Mailgun.

DMARC: политика безопасности почты

DMARC (Domain-based Message Authentication, Reporting, and Conformance) — это политика, которая говорит почтовым провайдерам, что делать с письмами, не прошедшими проверку SPF или DKIM.

У одного клиента была проблема — мошенники рассылали спам от имени их домена. Клиенты жаловались, репутация страдала. После настройки DMARC с политикой "reject" проблема исчезла за неделю.

DMARC запись создаётся поэтапно. Начинаю всегда с мониторинга:

_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com; ruf=mailto:dmarc-forensic@example.com; sp=none; adkim=r; aspf=r;"

Параметры расшифровываются так:

На практике я использую трёхэтапную схему внедрения DMARC:

Этап 1 (1-2 недели): Мониторинг с политикой "none". Собираем отчёты, анализируем все источники отправки писем.

Этап 2 (2-4 недели): Политика "quarantine" — подозрительные письма попадают в спам:

_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc-reports@example.com;"

Параметр pct=10 означает, что политика применяется только к 10% писем. Постепенно увеличиваю до 100%.

Этап 3: Строгая политика "reject" — неавторизованные письма отклоняются:

_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com; adkim=s; aspf=s;"

Отчёты DMARC приходят в XML формате. Для анализа использую сервисы типа DMARC Analyzer или парсю самостоятельно. Вот пример Python-скрипта для базового анализа:

import xml.etree.ElementTree as ET
import gzip
import base64

def parse_dmarc_report(xml_content):
    root = ET.fromstring(xml_content)
    
    for record in root.findall('.//record'):
        source_ip = record.find('.//source_ip').text
        count = record.find('.//count').text
        disposition = record.find('.//disposition').text
        
        print(f"IP: {source_ip}, Count: {count}, Action: {disposition}")

# Использование
with open('dmarc_report.xml', 'r') as f:
    parse_dmarc_report(f.read())

Настройка Reverse DNS (PTR записи)

Reverse DNS — это "обратная" DNS запись, которая по IP-адресу возвращает доменное имя. Многие почтовые провайдеры проверяют соответствие между IP сервера и доменом отправителя.

Проблема в том, что PTR запись может настроить только владелец IP-адреса — обычно это хостинг-провайдер. На VPS или выделенном сервере я всегда запрашиваю настройку PTR записи в поддержке хостинга.

Проверить текущую PTR запись можно командой:

# Проверяем PTR для IP 185.25.118.45
dig -x 185.25.118.45

# Или через nslookup
nslookup 185.25.118.45

Правильная PTR запись должна возвращать ваш домен или поддомен (например, mail.example.com). У одного клиента на VPS хостинге не было настроена PTR, и Gmail блокировал 40% писем. После настройки deliverability вырос до 98%.

⚠️
Частая ошибка: На shared-хостинге PTR запись обычно указывает на домен хостинг-провайдера (например, server123.hosting.com). Это нормально, но лучше использовать dedicated IP с собственной PTR.

Настройка SMTP для сайта

Отправка писем через встроенную PHP функцию mail() — это прошлый век. На деле такие письма попадают в спам в 60-70% случаев. Я всегда настраиваю SMTP-аутентификацию.

Для сайтов на WordPress использую плагин WP Mail SMTP. Настройка простая — указываем SMTP-сервер, логин и пароль:

// wp-config.php
define('WPMS_ON', true);
define('WPMS_SMTP_HOST', 'smtp.yandex.ru');
define('WPMS_SMTP_PORT', 587);
define('WPMS_SMTP_USER', 'noreply@example.com');
define('WPMS_SMTP_PASS', 'password123');
define('WPMS_SMTP_AUTH', true);
define('WPMS_SMTP_SECURE', 'tls');

В Битрикс настройка SMTP делается через админку или в файле .settings.php:

'email' => [
    'value' => [
        'method' => 'smtp',
        'smtp_server' => 'smtp.yandex.ru',
        'smtp_port' => '587',
        'smtp_user' => 'noreply@example.com',
        'smtp_password' => 'password123',
        'smtp_secure' => 'tls'
    ]
]

Для Laravel настройка в .env файле:

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=your-app-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="noreply@example.com"
MAIL_FROM_NAME="${APP_NAME}"

Честно говоря, для коммерческих проектов рекомендую использовать внешние SMTP-сервисы. SendGrid, Mailgun, Amazon SES — у них уже настроена репутация, DKIM работает из коробки, есть детальная аналитика доставки.

Вот пример настройки SendGrid в PHP:

use SendGrid\Mail\Mail;

$email = new Mail();
$email->setFrom("noreply@example.com", "Example Store");
$email->setSubject("Новый заказ #12345");
$email->addTo("manager@example.com", "Менеджер");

$email->addContent("text/plain", "Поступил новый заказ");
$email->addContent("text/html", "

Поступил новый заказ

"); $sendgrid = new \SendGrid('YOUR_SENDGRID_API_KEY'); $response = $sendgrid->send($email);

Тестирование и мониторинг доставки

После настройки SPF, DKIM и DMARC обязательно тестирую доставляемость. Использую несколько инструментов:

Mail-tester.com — отправляю тестовое письмо и получаю оценку от 1 до 10. Нормальный результат — 8-10 баллов. Ниже 7 — есть проблемы.

MXToolbox.com — проверяю DNS записи, репутацию IP, попадание в чёрные списки:

Собственный скрипт мониторинга — отправляю тестовые письма на Gmail, Yandex, Mail.ru и проверяю попадание в спам:

На практике мониторю ключевые метрики:

Был случай — у клиента резко упала доставляемость с 95% до 60%. Оказалось, их IP попал в спам-базу Spamhaus из-за соседа по серверу. Пришлось срочно менять IP и прогревать репутацию заново.

💡
Лайфхак: Настройте уведомления о попадании в спам-базы. Сервис Hetrix Tools бесплатно мониторит 10 IP-адресов и присылает алерты при изменении статуса.

Частые проблемы и их решения

За 10+ лет практики я сталкивался с типичными проблемами почтовой доставки. Вот самые частые и их решения:

Проблема 1: Письма попадают в спам, хотя SPF/DKIM/DMARC настроены.
Решение: Проверить содержимое письма. Слова "бесплатно", "акция", "скидка" в теме повышают spam score. Также влияет соотношение текста к картинкам — должно быть минимум 80% текста.

Проблема 2: DKIM подпись не проходит валидацию.
Решение: Чаще всего дело в неправильном форматировании DNS записи. Длинные ключи нужно разбивать на строки по 255 символов:

default._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." "2K3bv8mQ7f9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2K3bv8..."

Проблема 3: Gmail принимает письма, а Яндекс.Почта отклоняет.
Решение: Яндекс строже относится к репутации домена. Нужно "прогреть" репутацию — отправлять небольшие объёмы качественных писем в течение 2-4 недель.

Проблема 4: Письма доставляются, но с задержкой 5-10 минут.
Решение: Обычно это проблема greylisting — почтовый сервер временно отклоняет письма от неизвестных отправителей. Помогает настройка постоянного IP и улучшение репутации.

У одного клиента была интересная проблема — письма доставлялись нормально, но в Outlook отображались без картинок. Оказалось, нужно было добавить Content-ID для встроенных изображений:

// Правильная вставка изображения в email
$mail->addEmbeddedImage('/path/to/logo.png', 'logo_cid');
$mail->Body = 'Логотип';

Ещё одна частая ошибка — неправильный From заголовок. Домен в From должен совпадать с доменом, для которого настроены SPF/DKIM записи:

// Неправильно
$headers = 'From: manager@gmail.com';

// Правильно  
$headers = 'From: noreply@example.com';

Продвинутые настройки и оптимизация

Для высоконагруженных проектов с большими объёмами почты использую дополнительные настройки. Во-первых, настраиваю несколько поддоменов для разных типов писем:

Каждый поддомен получает отдельные SPF, DKIM и DMARC записи. Это позволяет изолировать репутацию разных типов писем.

Для крупных интернет-магазинов настраиваю dedicated IP pools в SendGrid или Mailgun:

// Настройка IP pool в SendGrid
$email = new \SendGrid\Mail\Mail();
$email->setIpPoolName('transactional-pool');
$email->setFrom('orders@shop.com', 'Интернет-магазин');
$email->setSubject('Заказ оформлен');

Также использую BIMI (Brand Indicators for Message Identification) для отображения логотипа компании рядом с письмом в Gmail и Apple Mail:

default._bimi.example.com. IN TXT "v=BIMI1; l=https://example.com/logo.svg; a=https://example.com/cert.pem"

BIMI требует строгой DMARC политики (p=quarantine или p=reject) и сертификат Verified Mark Certificate (VMC), который стоит около $1500 в год.

Для WordPress сайтов с большими объёмами писем рекомендую плагин Fluent SMTP с поддержкой множественных провайдеров:

// Автоматический выбор SMTP провайдера
add_filter('fluent_mail/default_connection', function($connection) {
    $hour = date('H');
    
    // Утром используем SendGrid (лучше для транзакционных писем)
    if ($hour >= 9 && $hour <= 18) {
        return 'sendgrid';
    }
    
    // Вечером переключаемся на Mailgun
    return 'mailgun';
});

На практике такая схема помогает распределить нагрузку и избежать лимитов отдельных провайдеров.

Честно говоря, правильная настройка почты для сайта — это не разовая задача, а процесс постоянного мониторинга и оптимизации. Репутация домена и IP-адреса строится месяцами, а потерять её можно за несколько дней неаккуратной рассылки.

Если вы столкнулись с проблемами доставки почты или хотите профессионально настроить все почтовые записи для своего сайта, обращайтесь за поддержкой Битрикс или поддержкой WordPress. Также можем помочь с доработкой сайта для улучшения email-функционала.

Нужна помощь с настройкой почтовой защиты?

Наши специалисты настроят SPF, DKIM и DMARC для вашего домена быстро и профессионально.

П
Павел
Веб-разработчик · 10+ лет опыта · Bitrix, WordPress, Laravel

Читайте также

Интеграция CRM с сайтом: как это сделать правильно Сколько стоит поддержка сайта в 2026 году Бэкапы сайта: как делать правильно и не терять данные