Что скрывается за запросом «PHP скрипт email рассылки»
Когда разработчик или маркетолог ищет PHP скрипт email рассылки, он обычно имеет в виду одно из трёх: написать отправку писем самому, найти готовый open-source скрипт или понять, не лучше ли сразу взять специализированную платформу. Разберём каждый вариант честно — без рекламы «магических» библиотек и без преувеличений.
Как работает отправка писем через PHP
В основе любого PHP-скрипта рассылки лежат два механизма: встроенная функция mail() и SMTP-подключение через внешние библиотеки. На практике mail() годится только для единичных транзакционных писем на своём сервере — без аутентификации, без контроля очередей и без какой-либо статистики.
Для массовых рассылок используют PHPMailer или SwiftMailer (ныне Symfony Mailer): они подключаются к SMTP-серверу с авторизацией, формируют правильные заголовки и поддерживают вложения. Но сами по себе это только транспортные обёртки — логику рассылки, управление базой подписчиков, обработку отписок и баунсов вам нужно писать самостоятельно.
Минимальный стек самописного скрипта
- PHP 8.x + Composer
- PHPMailer или Symfony Mailer для SMTP-транспорта
- MySQL/PostgreSQL — база подписчиков и статусов отправки
- Cron — планировщик запуска рассылки
- Обработчик баунсов (почтовый ящик + IMAP-парсер)
- Страница отписки с токеном и записью в БД
Рабочие примеры кода: от mail() до PHPMailer
Ниже — три рабочих сниппета, которые покрывают весь путь: от простейшей отправки до профессионального SMTP-подключения с обработкой ошибок. Копируйте, адаптируйте, тестируйте.
Пример 1: минимальная отправка через mail()
Функция mail() встроена в PHP и не требует библиотек. Синтаксис: mail(to, subject, message, headers, parameters). Подходит только для единичных писем на сервере с настроенным sendmail или локальным MTA.
<?php
// Минимальный PHP-скрипт отправки письма через mail()
$to = 'recipient@example.com';
$subject = 'Тест рассылки PHP';
$message = 'Привет! Это тестовое письмо от PHP-скрипта.';
// Заголовки: обязательны для корректного отображения
$headers = 'From: sender@yourdomain.com' . "\r\n";
$headers .= 'Reply-To: sender@yourdomain.com' . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-Type: text/html; charset=UTF-8' . "\r\n";
$headers .= 'X-Mailer: PHP/' . phpversion();
if (mail($to, $subject, $message, $headers)) {
echo 'Письмо отправлено успешно.';
} else {
echo 'Ошибка: письмо не отправлено. Проверьте настройки php.ini.';
}
?>
Важно: функция mail() вернёт true даже если письмо не дошло — она лишь передаёт сообщение локальному MTA. Для диагностики смотрите системный лог и лог PHP-ошибок.
Пример 2: отправка через PHPMailer с SMTP-авторизацией
PHPMailer — стандарт для продакшн-отправки. Устанавливается через Composer: composer require phpmailer/phpmailer. Поддерживает SSL/TLS, вложения, HTML-письма и детальную обработку ошибок.
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true); // true — включает исключения
try {
// Настройки SMTP-сервера
$mail->isSMTP();
$mail->Host = 'smtp.yourdomain.com'; // SMTP-хост
$mail->SMTPAuth = true;
$mail->Username = 'sender@yourdomain.com'; // Логин SMTP
$mail->Password = 'your_smtp_password'; // Пароль SMTP
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587; // 587 для TLS, 465 для SSL
// Отправитель и получатель
$mail->setFrom('sender@yourdomain.com', 'Имя отправителя');
$mail->addAddress('recipient@example.com', 'Имя получателя');
$mail->addReplyTo('reply@yourdomain.com', 'Reply-To');
// Содержимое письма
$mail->isHTML(true);
$mail->CharSet = 'UTF-8';
$mail->Subject = 'Тест PHPMailer через SMTP';
$mail->Body = '<h1>Привет!</h1><p>Это письмо отправлено через PHPMailer + SMTP.</p>';
$mail->AltBody = 'Это письмо отправлено через PHPMailer + SMTP.'; // plain-text версия
$mail->send();
echo 'Письмо успешно отправлено.';
} catch (Exception $e) {
// Детальная диагностика — смотрите $mail->ErrorInfo
echo "Ошибка отправки: {$mail->ErrorInfo}";
}
?>
Для Gmail SMTP используйте smtp.gmail.com, порт 587, TLS. Для Mail.ru — smtp.mail.ru, порт 465, SSL. Не забудьте включить «Доступ для сторонних приложений» или создать App Password в настройках аккаунта.
Пример 3: простой скрипт массовой рассылки по базе из MySQL
Базовый скрипт цикличной отправки — отправная точка для самописной рассылки. Запускается через cron.
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
// Подключение к БД
$pdo = new PDO('mysql:host=localhost;dbname=newsletter;charset=utf8mb4',
'db_user', 'db_pass');
// Выбираем активных подписчиков, которым ещё не отправляли
$stmt = $pdo->query(
"SELECT id, email, name FROM subscribers
WHERE status = 'active' AND last_sent IS NULL
LIMIT 500" // Отправляем батчами по 500 за запуск
);
$subscribers = $stmt->fetchAll(PDO::FETCH_ASSOC);
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.yourdomain.com';
$mail->SMTPAuth = true;
$mail->Username = 'sender@yourdomain.com';
$mail->Password = 'smtp_password';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
$mail->setFrom('sender@yourdomain.com', 'Ваш бренд');
$mail->isHTML(true);
$mail->CharSet = 'UTF-8';
$mail->Subject = 'Наша еженедельная рассылка';
foreach ($subscribers as $sub) {
try {
$mail->clearAddresses();
$mail->addAddress($sub['email'], $sub['name']);
$mail->Body = "<p>Привет, {$sub['name']}!</p><p>Текст письма...</p>
<p><a href='https://yourdomain.com/unsubscribe?id={$sub['id']}'>Отписаться</a></p>";
$mail->send();
// Обновляем статус — письмо отправлено
$upd = $pdo->prepare("UPDATE subscribers SET last_sent = NOW() WHERE id = ?");
$upd->execute([$sub['id']]);
usleep(100000); // 0.1 с пауза между письмами (НЕ прогрев!)
} catch (Exception $e) {
error_log("Ошибка для {$sub['email']}: {$mail->ErrorInfo}");
}
}
echo "Рассылка завершена. Обработано: " . count($subscribers) . " адресов.";
?>
usleep() в цикле — это не прогрев, а просто пауза между запросами к SMTP. Настоящий прогрев — постепенное наращивание суточных объёмов (рампы по дням) с контролем баунсов < 2% и жалоб < 3% на каждом шаге.
Настройка окружения: php.ini, sendmail и SMTP-параметры
Прежде чем запускать любой PHP-скрипт рассылки, нужно правильно настроить окружение. Функция mail() опирается на конфигурацию php.ini и системный sendmail. PHPMailer обходит эти настройки, работая напрямую через SMTP — но понимать базовую конфигурацию всё равно необходимо.
Ключевые директивы php.ini для email
| Директива | Значение по умолчанию | Описание |
|---|---|---|
SMTP |
localhost | SMTP-хост для Windows (игнорируется на Linux) |
smtp_port |
25 | Порт SMTP-сервера для функции mail() на Windows |
sendmail_path |
/usr/sbin/sendmail -t -i | Путь к sendmail или совместимой программе (Linux/macOS) |
sendmail_from |
(пусто) | Email отправителя по умолчанию (только Windows) |
mail.add_x_header |
Off | Добавляет заголовок X-PHP-Originating-Script |
mail.log |
(пусто) | Путь к файлу лога вызовов mail() |
Настройка php.ini для отправки через локальный SMTP (Windows)
; php.ini — секция [mail function]
; Windows: указываем внешний SMTP-сервер
SMTP = smtp.yourdomain.com
smtp_port = 587
sendmail_from = sender@yourdomain.com
; Linux: путь к sendmail или Postfix
; sendmail_path = /usr/sbin/sendmail -t -i
; Логирование вызовов mail() — полезно для отладки
mail.log = /var/log/php_mail.log
Переопределение настроек через ini_set()
Если у вас нет доступа к php.ini (хостинг, shared-сервер), параметры можно переопределить прямо в скрипте с помощью ini_set():
<?php
// Переопределяем настройки SMTP из скрипта (только для mail() на Windows)
ini_set('SMTP', 'smtp.yourdomain.com');
ini_set('smtp_port', '587');
ini_set('sendmail_from', 'sender@yourdomain.com');
// Для диагностики — включаем логирование
ini_set('mail.log', '/tmp/php_mail_debug.log');
// Дальше — стандартный вызов mail()
mail('test@example.com', 'Тест ini_set', 'Сообщение');
?>
ini_set() для SMTP-настроек работает только на Windows. На Linux mail() передаёт письма через sendmail/Postfix, и SMTP-параметры из php.ini игнорируются. Для продакшн-рассылки на Linux — только PHPMailer или Symfony Mailer с прямым SMTP-подключением.
Пошаговая инструкция: запустить рассылку на PHPMailer за 4 шага
Этот раздел — практический минимум для запуска рабочего PHP-скрипта email рассылки с нуля. Предполагается: Linux-сервер, PHP 8.x, доступ к внешнему SMTP-серверу.
Шаг 1: установка Composer и PHPMailer
# Скачиваем Composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer
# Создаём проект и устанавливаем PHPMailer
mkdir my-mailer && cd my-mailer
composer require phpmailer/phpmailer
# Проверяем установку
ls vendor/phpmailer/phpmailer/src/
Шаг 2: создание конфигурационного файла
<?php
// config.php — настройки SMTP-подключения
define('SMTP_HOST', 'smtp.yourdomain.com');
define('SMTP_PORT', 587);
define('SMTP_USER', 'sender@yourdomain.com');
define('SMTP_PASS', 'your_secure_password');
define('SMTP_FROM', 'sender@yourdomain.com');
define('SMTP_FROM_NAME','Ваш бренд');
define('SMTP_SECURE', 'tls'); // 'tls' или 'ssl'
// Подключение к БД
define('DB_HOST', 'localhost');
define('DB_NAME', 'newsletter');
define('DB_USER', 'db_user');
define('DB_PASS', 'db_password');
?>
Шаг 3: тестовая отправка и диагностика
<?php
// test_send.php — проверяем SMTP-подключение перед боевой рассылкой
require 'config.php';
require 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer(true);
try {
$mail->SMTPDebug = SMTP::DEBUG_SERVER; // Подробный вывод SMTP-диалога
$mail->isSMTP();
$mail->Host = SMTP_HOST;
$mail->SMTPAuth = true;
$mail->Username = SMTP_USER;
$mail->Password = SMTP_PASS;
$mail->SMTPSecure = SMTP_SECURE;
$mail->Port = SMTP_PORT;
$mail->CharSet = 'UTF-8';
$mail->setFrom(SMTP_FROM, SMTP_FROM_NAME);
$mail->addAddress('your-test@gmail.com'); // Замените на свой ящик
$mail->isHTML(true);
$mail->Subject = 'Тестовое письмо — PHPMailer SMTP';
$mail->Body = '<p>SMTP работает корректно. Проверьте папку <strong>Входящие</strong>.</p>';
$mail->send();
echo "✅ Тест пройден — письмо отправлено.\n";
echo "Теперь проверьте: 1) Входящие 2) Спам 3) mail-tester.com\n";
} catch (Exception $e) {
echo "❌ Ошибка: {$mail->ErrorInfo}\n";
// Частые причины:
// - Неверный хост/порт/пароль
// - Брандмауэр блокирует исходящий SMTP (порт 25 часто закрыт на VPS)
// - SSL/TLS версия не поддерживается (попробуйте 'ssl' вместо 'tls')
}
?>
Шаг 4: настройка cron для автоматического запуска
# Открываем crontab
crontab -e
# Запускаем рассылку каждые 15 минут (батч по 500 писем)
*/15 * * * * /usr/bin/php /var/www/my-mailer/send_batch.php >> /var/log/mailer.log 2>&1
# Запускаем ежедневно в 10:00 (для daily-рассылок)
0 10 * * * /usr/bin/php /var/www/my-mailer/daily_campaign.php >> /var/log/daily_mailer.log 2>&1
Ограничения PHP-скрипта при массовых рассылках
Самописный PHP скрипт email рассылки — это рабочий инструмент для небольших объёмов: транзакционные письма, уведомления, рассылки до нескольких тысяч адресов в день. Как только речь заходит о регулярных кампаниях по большой базе, проявляются системные ограничения:
- Нет управления репутацией IP. Скрипт не знает, что Gmail начал возвращать 4xx, и продолжает слать — репутация горит.
- Нет прогрева. Новый IP без постепенного наращивания объёма немедленно получает спам-метки. Прогрев — не опция, а условие доставляемости: без него даже легальная рассылка уходит в спам.
- Нет ротации каналов. Один SMTP-канал — одна точка отказа. При блокировке рассылка встаёт целиком.
- Нет обработки FBL. Жалобы от провайдеров (формат ARF) нужно получать, парсить и автоматически исключать жалобщиков — иначе жалобы накапливаются и топят домен.
- Нет аналитики доставляемости. Открытия, клики, hard- и soft-баунсы, отписки — всё это нужно реализовывать вручную.
- Производительность. PHP синхронен по природе; даже с очередями отправить больше 50–100К писем в день с одного процесса сложно без специальных архитектурных решений.
Когда PHP-скрипта достаточно
Честный ответ: если ваш объём — до 2 000–5 000 писем в день, база собрана корректно, SMTP настроен с SPF/DKIM/DMARC и PTR-записями, а письма транзакционные — самописного скрипта на PHPMailer вполне хватит. Это дёшево, просто и управляемо.
Как только появляется хотя бы одно из условий ниже — пора смотреть в сторону специализированных платформ:
- Объём рассылки превышает 10–50К писем в день
- Нужна сегментация, A/B-тесты или автоматические серии писем
- Несколько SMTP-каналов или IP-адресов
- Важна аналитика: открытия, клики, карта доставляемости по провайдерам
- База растёт и нужна автоматическая чистка баунсов
Сравнение: самописный скрипт vs PHPMailer vs готовая платформа
Выбор инструмента зависит от объёма, ресурсов команды и требований к доставляемости. Таблица ниже — быстрый ориентир:
| Параметр | mail() / самописный | PHPMailer / SMTP | Готовая платформа |
|---|---|---|---|
| Объём писем/день | до 500 | до 5 000–10 000 | 10 000 — 1 000 000+ |
| Сложность настройки | Минимальная | Низкая | Средняя (1 день) |
| Управление репутацией IP | ❌ Нет | ❌ Нет | ✅ Встроено |
| Прогрев IP | ❌ Нет | ❌ Нет | ✅ Встроено |
| Обработка баунсов и FBL | ❌ Ручная | ⚠️ Частично | ✅ Автоматически |
| Ротация SMTP-каналов | ❌ Нет | ❌ Нет | ✅ Адаптивная |
| Аналитика (открытия, клики) | ❌ Нет | ❌ Нет | ✅ Полная |
| Стоимость старта | 0 (время разработки) | 0 (open-source) | от 300 USDT (разово) |
| Абонентская плата | Нет | Нет | Нет (вечная лицензия) |
Как протестировать PHP-скрипт рассылки
Перед боевой отправкой — особенно если настраиваете всё с нуля — обязательно проверьте корректность скрипта и репутацию своей инфраструктуры. Типичная последовательность тестирования:
Инструменты для проверки
- mail-tester.com — отправьте тестовое письмо на выданный сервисом адрес, получите оценку по 10-балльной шкале: SPF, DKIM, DMARC, SpamAssassin-оценка, HTML-валидация. Бесплатно, 3 теста в день.
- MXToolbox (mxtoolbox.com) — проверка SPF, DKIM, DMARC-записей, блэклистов (200+ списков одновременно), PTR/rDNS, SMTP-диагностика. Незаменим при настройке DNS.
- Google Postmaster Tools — мониторинг репутации домена и IP у Gmail: спам-рейтинг, аутентификация, ошибки доставки. Требует верификации домена.
- Mail.ru Postmaster — аналог от Mail.ru: доставляемость, жалобы, блэклисты. Подключается через postmaster.mail.ru.
Типичные ошибки и их диагностика
| Ошибка | Причина | Решение |
|---|---|---|
Warning: mail(): Failed |
sendmail не установлен или неверный путь | Установите sendmail/Postfix или перейдите на PHPMailer |
| SMTP Error: Could not connect | Неверный хост/порт или брандмауэр | Проверьте хост, порт 587/465, откройте исходящий SMTP |
| 535 Authentication failed | Неверные логин/пароль SMTP | Проверьте учётные данные, для Gmail — App Password |
| Письмо уходит в спам | Нет SPF/DKIM или IP в блэклисте | Настройте SPF/DKIM/DMARC, проверьте MXToolbox |
| 550 5.7.1 Rejected | IP или домен в блэклисте | Проверьте блэклисты через MXToolbox, запросите делистинг |
| mail() возвращает true, письмо не приходит | Проблема на уровне локального MTA | Проверьте /var/log/mail.log, включите mail.log в php.ini |
Что нужно настроить до первой отправки
Независимо от того, используете ли вы самописный PHP скрипт email рассылки или готовую платформу, без правильных DNS-записей письма не дойдут до инбокса:
- SPF — разрешает серверам отправлять от имени домена. Пример:
v=spf1 ip4:1.2.3.4 include:_spf.yourdomain.com ~all - DKIM — криптографически подписывает каждое письмо. TXT-запись вида:
default._domainkey TXT "v=DKIM1; k=rsa; p=МВаш_публичный_ключ" - DMARC — задаёт политику для писем, не прошедших SPF/DKIM. Пример:
v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com - PTR / rDNS — IP-адрес должен резолвиться в имя отправляющего хоста; провайдеры проверяют это при каждом SMTP-соединении
Без этой тройки массовая почта в инбокс не попадает — независимо от качества контента и репутации базы.
Готовые платформы как альтернатива самописному скрипту
Вместо того чтобы заново изобретать велосипед, команда MailCore System предлагает готовые PHP-платформы, устанавливаемые на ваш сервер. Ключевое отличие от SaaS-сервисов: вы платите один раз, контакты хранятся в вашей БД, никаких лимитов и модерации чужого сервиса.
Interspire Email Marketer + Maborak
Классика рынка. Interspire — зрелая PHP-платформа с простым интерфейсом, который освоит любой. В комплекте от MailCore идут 7 модулей Maborak Technologies: Multiple MTA с ротацией IP и оптимизацией под PowerMTA, многопоточная отправка (Multi-Thread v4.0 через CLI), Remote Bounce Processor v1.2 для автоматической чистки базы, FBL-обработчик (жалобы в формате ARF автоматически исключают жалобщиков), спинтакс-уникализация писем (Spins v3.6), гео-аналитика и резервное копирование. Плюс 6 AI-модулей MailCore для генерации писем и воронок. Цена комплекта — 250 USDT, вечная лицензия, без абонплаты. В подарок при покупке — 10 000 AI-кредитов.
Protosender 8 PRO
Флагман MailCore с AI-автопилотом. Современный движок: визуальный конструктор цепочек писем, адаптивная ротация SMTP-каналов, встроенный модуль прогрева, нативная интеграция с PowerMTA. AI-движок собирает план рассылки из короткой анкеты — welcome-серии, реактивация, допродажи — и ведёт цепочку сам, оценивая реакцию базы ежечасно. Адаптивная ротация работает по каждому провайдеру отдельно: если горит Gmail — своп только для Gmail, остальные потоки продолжают на полной скорости. 250 USDT, вечная лицензия.
Mumara PRO + ESP
Enterprise-уровень: сплит-тесты, триггеры, динамический контент, до 500 потоков отправки, PowerMTA-конфигуратор прямо из интерфейса, мониторинг блэклистов с авто-отключением проблемных серверов. Подходит агентствам и нагруженным проектам с API-интеграциями. Также 250 USDT разово.
Транспортный уровень: почему SMTP-сервера мало
PHP-платформа — это фронтенд рассылки: интерфейс, база подписчиков, шаблоны, аналитика. Но письма доставляет MTA (Mail Transfer Agent) — транспортный сервер, который берёт письма платформы и доставляет на серверы Gmail, Mail.ru, Yahoo и тысяч других доменов, решая, с какого IP, с какой скоростью и по каким правилам.
Промышленный стандарт — PowerMTA. На нём построены крупнейшие ESP мира. Он ведёт отдельную стратегию на каждого провайдера: свои лимиты соединений, скорость, реакция на отказы. При росте отказов от провайдера PowerMTA автоматически уходит в режим BACKOFF — сниженный темп с ретраями — и сам возвращается к полной скорости, когда приём восстановлен. Ни один PHP-скрипт этого не умеет.
Рекомендуемые конфигурации по объёмам
| Объём писем/день | SMTP-узлы | Домены | Стоимость серверов/мес |
|---|---|---|---|
| До 50 000 | 1 | 2 | ≈ 40 USD |
| 50 000 — 200 000 | 3 | 6 | ≈ 90 USD |
| 200 000 — 1 000 000 | 6 | 12 | ≈ 175 USD |
| Свыше 1 000 000 | от 10 | от 20 | от 300 USD |
Аренда одного VDS под SMTP-узел обходится примерно в 25 USD/мес, основной сервер под платформу — от 15 USD (до 50К писем/день). После правильного прогрева результат — 95%+ попадание в инбокс.
График прогрева: как правильно вводить новый IP
Прогрев нового IP — не опция, а обязательное условие доставляемости. Вот реальный рамп-план из практики MailCore System, который используется при запуске production-инфраструктуры:
| Период | Объём (писем/час) | Сегмент базы | Контрольный порог |
|---|---|---|---|
| Дни 1–3 | 5 000/час | Активные за последний месяц | 4xx < 3% |
| Дни 4–7 | 15 000/час | Сегменты A + B (90-дневные) | Bounce < 2% |
| С 8-го дня | 40 000/час | Production — вся база | AI-ревью метрик |
Расширение объёма на следующий шаг — только при соблюдении контрольных порогов. При превышении 4xx или bounce — объём не наращивается до нормализации метрик.
Попробовать перед покупкой
Все платформы MailCore System доступны на живых демо-стендах: реальные инсталляции Protosender, Interspire, Mumara с открытым доступом. Не презентации — рабочие панели. Логины на странице демо.
Если нужна быстрая оценка стоимости под конкретный объём — воспользуйтесь онлайн-калькулятором на странице услуг: выбираете скрипт, MTA, SMTP-узлы, домены, прогрев — постатейная смета считается мгновенно, лицензии и услуги раздельно.
Часто задаваемые вопросы
Можно ли сделать массовую email рассылку на чистом PHP?
Технически — да, используя PHPMailer или Symfony Mailer для подключения к SMTP. Но для объёмов свыше 5–10 тысяч писем в день самописный PHP-скрипт не справляется с управлением репутацией IP, прогревом, ротацией каналов и обработкой баунсов. На больших объёмах нужна специализированная платформа.
Чем готовая платформа лучше самописного PHP-скрипта рассылки?
Готовая платформа (например, Interspire или Protosender) уже содержит управление базой подписчиков, обработку баунсов и FBL-жалоб, ротацию SMTP-каналов, аналитику и инструменты прогрева. Всё это пришлось бы реализовывать вручную в самописном скрипте.
Сколько стоит установить готовый скрипт рассылки на свой сервер?
Лицензия на платформы MailCore (Interspire, Protosender, Mumara) стоит 250 USDT разово — без абонплаты. Установка под ключ — от 50 USDT. Итого от 300 USDT за готовую систему на вашем сервере за один день.
Обязательно ли настраивать SPF, DKIM и DMARC для рассылок через PHP?
Да, это обязательно. Без SPF, DKIM и DMARC письма не проходят проверку аутентификации и попадают в спам вне зависимости от качества контента. Также важна PTR/rDNS-запись: IP должен резолвиться в имя отправляющего хоста.
Нужен ли прогрев IP при использовании PHP-скрипта рассылки?
Да. Прогрев нужен при любом инструменте отправки — будь то PHP-скрипт или промышленный MTA. Без постепенного наращивания объёма новый IP сразу получает спам-метки. Прогрев — не опция, а условие доставляемости.
Как настроить php.ini для отправки email через PHP?
На Windows укажите директивы SMTP (хост), smtp_port (порт, обычно 587) и sendmail_from (адрес отправителя). На Linux mail() работает через системный sendmail/Postfix, путь задаётся в sendmail_path. Для продакшн-рассылок рекомендуется PHPMailer с прямым SMTP-подключением — он обходит настройки php.ini и работает стабильнее.
Как протестировать PHP-скрипт email рассылки перед боевой отправкой?
Отправьте тестовое письмо на mail-tester.com — сервис оценит SPF, DKIM, DMARC и SpamAssassin-оценку. Проверьте DNS-записи через MXToolbox. Подключите Google Postmaster Tools для мониторинга репутации у Gmail. В самом скрипте включите SMTPDebug = SMTP::DEBUG_SERVER для просмотра полного SMTP-диалога.
Какие SMTP-провайдеры можно использовать с PHPMailer?
PHPMailer работает с любым SMTP-сервером: Gmail SMTP (smtp.gmail.com, порт 587, TLS), Mail.ru (smtp.mail.ru, порт 465, SSL), Яндекс (smtp.yandex.ru, порт 465, SSL), а также с собственным корпоративным SMTP или PowerMTA-сервером. Для массовых рассылок рекомендуется собственный SMTP-узел на VPS с настроенными SPF/DKIM/DMARC.