Вопрос «как сделать рассылку на PHP» звучит просто, но за ним скрываются совершенно разные задачи: отправить 100 уведомлений с сайта или раскатить 200 000 писем в день на живую базу клиентов. Встроенная функция mail() закрывает первое. Второе требует иного подхода — платформы, MTA и прогрева. Разберём весь путь от нуля до промышленного решения.
Что такое PHP-скрипт рассылки и когда он нужен
PHP-скрипт рассылки — это программный код на PHP, который забирает список адресов из базы данных, формирует письмо и отправляет его через SMTP или системную функцию. Исторически это был самый доступный способ запустить рассылку на shared-хостинге: установил скрипт, прописал настройки — и готово.
Сценарии, где такой подход оправдан:
- Транзакционные уведомления с сайта (подтверждение заказа, сброс пароля).
- Небольшие внутренние рассылки до нескольких тысяч адресов в день.
- Прототип или MVP, когда важна скорость запуска, а не масштаб.
Как только объём переваливает за десятки тысяч писем, возникают проблемы: очереди зависают, IP улетают в блэклисты, доставляемость падает. Здесь PHP-скрипт в чистом виде заканчивается и начинается инфраструктура.
Встроенный mail() и PHPMailer: в чём разница
Функция mail(): синтаксис и пример кода
Встроенная mail() передаёт письмо локальному MTA (Sendmail, Postfix) или напрямую использует конфиг php.ini. Плюс один — простота. Минусов больше: нет контроля соединений, нет очереди, нет обработки ошибок, нет DKIM-подписи «из коробки». На shared-хостинге письма часто уходят в спам уже на первой сотне отправок.
Минимальный рабочий пример скрипта рассылки писем PHP с использованием mail():
<?php
// Простая отправка через mail()
$to = 'recipient@example.com';
$subject = 'Тема письма';
$message = 'Текст вашего письма';
// Заголовки для корректной обработки
$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 'Ошибка отправки.';
}
?>
Для массовой рассылки по CSV-базе добавляют цикл:
<?php
// Рассылка по базе адресов из CSV
$file = fopen('subscribers.csv', 'r');
$subject = 'Наша новая акция';
$from = 'news@yourdomain.com';
while (($row = fgetcsv($file)) !== false) {
$to = $row[0]; // email в первой колонке
$name = isset($row[1]) ? $row[1] : '';
$message = "<p>Привет, {$name}! Специально для вас...</p>";
$headers = "From: {$from}\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
mail($to, $subject, $message, $headers);
usleep(100000); // пауза 0.1 с между письмами
}
fclose($file);
?>
PHPMailer: настройка SMTP и пример кода
Библиотеки вроде PHPMailer или SwiftMailer добавляют SMTP-аутентификацию, HTML-шаблоны, вложения и базовую обработку ошибок. Это шаг вперёд, но они решают только задачу формирования и передачи письма — не доставляемость, не прогрев, не управление репутацией IP.
Установка через Composer:
composer require phpmailer/phpmailer
Полный пример подключения PHPMailer через SMTP с TLS и вложением:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
// Настройки сервера
$mail->isSMTP();
$mail->Host = 'smtp.yourdomain.com'; // SMTP-сервер
$mail->SMTPAuth = true;
$mail->Username = 'user@yourdomain.com';
$mail->Password = 'your_password';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // TLS
$mail->Port = 587; // порт для TLS
// Отправитель и получатель
$mail->setFrom('user@yourdomain.com', 'Имя Отправителя');
$mail->addAddress('recipient@example.com', 'Имя Получателя');
$mail->addReplyTo('reply@yourdomain.com', 'Ответы');
// Опционально: вложение
$mail->addAttachment('/path/to/file.pdf', 'документ.pdf');
// Контент
$mail->isHTML(true);
$mail->CharSet = 'UTF-8';
$mail->Subject = 'Тема письма';
$mail->Body = '<h1>Заголовок</h1><p>HTML-текст письма</p>';
$mail->AltBody = 'Текстовая версия для почтовиков без HTML';
$mail->send();
echo 'Письмо отправлено!';
} catch (Exception $e) {
echo "Ошибка отправки: {$mail->ErrorInfo}";
}
?>
Сравнение решений: mail() vs PHPMailer vs готовая платформа
Выбор инструмента определяется объёмом и требованиями к доставляемости. Таблица ниже поможет сориентироваться быстро:
| Критерий | mail() | PHPMailer / SwiftMailer | Готовая платформа (Interspire / Protosender / Mumara) |
|---|---|---|---|
| Сложность настройки | Минимальная | Низкая (Composer) | Средняя (установка за 1 день) |
| Лимит писем/день | До 500–1 000 (хостинг) | 500–2 000 (SMTP-провайдер) | Без лимитов (свой MTA) |
| Доставляемость | Низкая (часто спам) | Средняя | 95%+ после прогрева |
| DKIM / SPF / DMARC | Нет | Частично (зависит от SMTP) | Полная поддержка |
| Прогрев IP | Нет | Нет | Встроен в платформу |
| Управление базой | Нет | Нет | Импорт CSV/TXT, сегментация, отписки |
| Цена | Бесплатно | Бесплатно (библиотека) | От 300 USDT (лицензия + установка) |
Выбор SMTP-порта и провайдера
При настройке PHPMailer или собственного MTA важно правильно выбрать порт:
- Порт 25 — стандартный SMTP, часто блокируется хостингами для защиты от спама. Используется для server-to-server (MTA ↔ MTA).
- Порт 465 — SMTP over SSL (устаревший стандарт, но широко поддерживается).
- Порт 587 — SMTP with STARTTLS, рекомендуемый для аутентифицированной отправки через провайдера.
Сравнение SMTP-провайдеров для PHPMailer
| Провайдер | Лимит бесплатно | Цена за 100К писем | Особенности |
|---|---|---|---|
| Gmail | 500 писем/день | — | Только для личного/тестового использования |
| Yandex | 500 писем/день | — | Требует 2FA-пароль приложения |
| SendGrid | 100 писем/день | ~$14,95 | API + SMTP, хорошая доставляемость |
| Mailgun | 100 писем/день (3 мес.) | ~$35 | Гибкий API, удобные вебхуки |
| Amazon SES | 62 000/мес (с EC2) | ~$1 | Дешевле всех, требует верификации домена |
Для объёмов свыше 50 000 писем/день внешние SMTP-провайдеры становятся дороже, чем собственная инфраструктура на базе PowerMTA или MailerQ — об этом ниже.
Настройка cron для рассылки по расписанию
Один из самых частых сценариев: PHP-скрипт рассылки должен запускаться автоматически — раз в день, раз в час или по событию. Для этого используют cron (планировщик задач Linux).
Базовый синтаксис cron-задачи:
# Формат: минута час день_месяца месяц день_недели команда
# Запуск скрипта рассылки каждый день в 08:00
0 8 * * * /usr/bin/php /var/www/html/send_newsletter.php >> /var/log/mailer.log 2>&1
Для платформ вроде Interspire автоответчик запускается через CLI-скрипт. Типовой путь к скрипту автоответчика:
# Cron для auto_responder Interspire (каждые 5 минут)
*/5 * * * * /usr/bin/php /var/www/interspire/admin/com/auto_responder.php >> /dev/null 2>&1
# Cron для обработки очереди рассылки
*/1 * * * * /usr/bin/php /var/www/interspire/admin/com/send_queue.php >> /dev/null 2>&1
Что нужно для массовой рассылки на PHP: полный стек
Профессиональный скрипт рассылки писем на PHP — это не просто mail(). Это связка из нескольких слоёв:
- Платформа рассылок — веб-интерфейс для управления базой, кампаниями и шаблонами. Именно здесь «живёт» PHP-код.
- MTA (Mail Transfer Agent) — транспортный сервер, который принимает письма от платформы и доставляет их на серверы Gmail, Mail.ru, Yahoo. Без MTA платформа — просто интерфейс без двигателя.
- DNS-записи — SPF, DKIM, DMARC и rDNS/PTR. Без них массовая почта в инбокс не попадает.
- Прогрев IP — постепенный ввод новых IP-адресов в работу по расписанию. Без прогрева даже легальная рассылка с нового IP уходит в спам.
HTML-вёрстка писем: рекомендации
Скрипт — только половина задачи. Письмо должно корректно отображаться в десятках почтовых клиентов: Gmail, Outlook, Mail.ru, Apple Mail, мобильные приложения. Несколько обязательных правил:
Базовые принципы HTML-шаблона письма
- Только табличная вёрстка —
<table>,<tr>,<td>. CSS-flexbox и grid в почтовиках почти не работают. - Инлайн-стили — все CSS-правила пишите в атрибуте
style="". Внешние и внутренние стили (<style>) Gmail и ряд мобильных клиентов игнорируют. - Максимальная ширина 600–640px — стандарт для десктопных почтовых клиентов; на мобильных растянется на весь экран.
- Атрибут
altдля изображений — при отключённых картинках получатель должен понять смысл письма по alt-тексту. - Заголовок
List-Unsubscribe— добавьте в заголовки письма ссылку на отписку; Gmail и Yahoo с 2024 года требуют его для массовых отправителей.
Минимальный HTML-шаблон письма для рассылки:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Письмо</title>
</head>
<body style="margin:0;padding:0;background:#f4f4f4;">
<table width="100%" cellpadding="0" cellspacing="0" style="background:#f4f4f4;">
<tr>
<td align="center">
<table width="600" cellpadding="0" cellspacing="0"
style="background:#ffffff;border-radius:6px;overflow:hidden;">
<tr>
<td style="background:#2563eb;padding:24px 32px;">
<h1 style="color:#fff;margin:0;font-size:24px;">Ваш заголовок</h1>
</td>
</tr>
<tr>
<td style="padding:32px;">
<p style="color:#333;font-size:16px;line-height:1.6;">
Текст вашего письма. Используйте {{name}} для персонализации.
</p>
<a href="https://example.com/action"
style="display:inline-block;background:#2563eb;color:#fff;
padding:12px 28px;border-radius:4px;text-decoration:none;
font-size:16px;margin-top:16px;">
Кнопка CTA
</a>
</td>
</tr>
<tr>
<td style="padding:16px 32px;border-top:1px solid #e5e7eb;">
<p style="color:#999;font-size:12px;margin:0;">
<a href="{{unsubscribe_url}}" style="color:#999;">Отписаться</a>
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
Перед боевой отправкой тестируйте шаблон в Litmus или Email on Acid — сервисах превью во всех популярных почтовых клиентах. В Interspire, Protosender и Mumara встроен редактор шаблонов на базе TinyMCE с визуальным режимом — HTML писать вручную не обязательно.
Управление базой подписчиков: импорт, сегментация, отписки
Качество базы напрямую определяет доставляемость. Даже лучший скрипт рассылки PHP не поможет, если в базе 30% невалидных адресов.
Форматы импорта и требования к базе
- CSV и TXT — стандарт для импорта в Interspire, Protosender и Mumara. Одна строка — один адрес; дополнительные поля (имя, город, сегмент) разделяются запятой.
- Валидация перед импортом — удалите дубли, проверьте синтаксис адресов (regex или онлайн-валидатор), уберите ролевые адреса (info@, admin@, postmaster@).
- Чистка от невалидных адресов — Remote Bounce Processor v1.2 в Interspire автоматически удаляет hard-баунсы и помечает soft-баунсы после каждой кампании.
Сегментация и персонализация
Сегментация — разделение базы на группы по поведению, активности или атрибутам. Правила простые: начинайте прогрев с самых активных (открывали письма последние 30 дней), затем расширяйте на менее активные сегменты. Mumara PRO поддерживает динамическую сегментацию и триггерные рассылки прямо из интерфейса.
Заголовок List-Unsubscribe и обработка отписок
С февраля 2024 года Google и Yahoo требуют от массовых отправителей (более 5 000 писем/день) наличия заголовка List-Unsubscribe с обработкой отписок в течение 2 дней. Добавить его в PHPMailer:
<?php
// Добавление List-Unsubscribe в PHPMailer
$mail->addCustomHeader('List-Unsubscribe', '<mailto:unsub@yourdomain.com?subject=unsubscribe>, <https://yourdomain.com/unsubscribe?id=12345>');
$mail->addCustomHeader('List-Unsubscribe-Post', 'List-Unsubscribe=One-Click');
?>
В платформах Interspire, Protosender и Mumara ссылка отписки и обработка FBL (Feedback Loop) автоматизированы: жалобы от провайдеров приходят в формате ARF и мгновенно исключают адрес из базы.
Готовые PHP-платформы: что предлагает MailCore System
Команда MailCore System за 10+ лет развернула более 150 инсталляций платформ и MTA. Через эти установки проходит 50 млн+ писем в месяц. Вот три готовых решения на PHP, которые разворачиваются на вашем сервере.
Interspire Email Marketer + Maborak + AI
Классика жанра — PHP-платформа с многолетней историей. В комплекте MailCore идёт полная сборка: Interspire Email Marketer RU/EN v6.1.7 плюс 7 модулей Maborak Technologies. Среди них — Multiple MTA с ротацией IP и мониторингом, Multi-Thread v4.0 для многопоточной отправки через CLI, Remote Bounce Processor v1.2 для обработки отказов и чистки базы, а также Maborak Spins v3.6 для уникализации писем через спинтакс. Дополнительно — 6 AI-модулей MailCore: от разбора оффера до генерации писем и спам-проверки. В подарок при покупке — 10 000 AI-кредитов (эквивалент 100 USDT на AI-генерации, хватает на десятки писем и воронок). Цена: 250 USDT, вечная лицензия, без абонплат.
Protosender 8 PRO — флагман с AI-автопилотом
Современный движок массовых рассылок на PHP с AI-слоем. Визуальный конструктор цепочек строит welcome-серии, реактивации и допродажи — AI генерирует последовательность писем, их роли и тайминг из короткой анкеты о продукте. Адаптивная ротация отслеживает, что именно «спамит» — письмо, домен или SMTP-канал, — и меняет только проблемное звено. Например, если Gmail начинает давать повышенный процент спам-жалоб, Protosender делает своп только для Gmail, тогда как рассылка по Yandex, Mail.ru и остальным провайдерам продолжается на полной скорости. Модуль прогрева SMTP работает на базе PowerMTA с контролем реакции провайдеров на каждом шаге. Цена: 250 USDT, вечная лицензия.
Mumara PRO + ESP — enterprise-платформа
Для агентств и нагруженных проектов: до 500 потоков отправки, сплит-тесты, триггеры, динамический контент, PowerMTA-конфигуратор из интерфейса, мониторинг блэклистов с авто-отключением проблемных серверов. На соответствующем железе — свыше миллиона писем в час. Цена: 250 USDT, вечная лицензия.
Реальный кейс: 50 000 адресов, 94% доставляемость за 2 недели
Задача: Интернет-магазин одежды, база 50 000 адресов, ранее рассылка шла через SendGrid, open rate упал до 9%, часть писем уходила в спам.
Решение: Команда MailCore развернула Protosender 8 PRO + PowerMTA 6.0r3 на 3 SMTP-узлах. Настроены SPF, DKIM, DMARC и rDNS для 6 доменов. Прогрев стартовал по сегменту «активных за 30 дней» (12 000 адресов).
Рампа прогрева:
- Дни 1–3: 5 000 писем/час, 4xx — 1,8%, баунсы — 0,9%
- Дни 4–7: 15 000 писем/час, 4xx — 2,1%, баунсы — 1,4%
- День 8: переход в production, 40 000 писем/час по всей базе
Результат через 2 недели:
- Доставляемость в инбокс: 94%
- Open rate: 18%
- Жалобы на спам: 0,08% (ниже порога 0,1%)
Затраты после запуска: аренда серверов ~125 USD/мес напрямую хостеру, без абонплат за подписчика.
Сколько стоит запуск: цифры без воды
Лицензия любой из платформ — 250 USDT разово. Установка скрипта на ваш сервер — от 50 USDT. Итого: от 300 USDT и один день работы — и у вас готовая система на собственном сервере.
Типовая смета для объёма 200К писем в день: Protosender + PowerMTA 6.0r3 + 4 SMTP-узла + 8 доменов + подготовка серверов + прогрев + сопровождение 30 дней = 1465 USDT на старте. После запуска — только аренда серверов хостеру напрямую, около 125 USD в месяц. Никаких абонплат за подписчика, никакой модерации, никаких чужих лимитов.
Рассчитать точную смету под свои объёмы можно в интерактивном калькуляторе MailCore: выбираете скрипт, MTA, количество SMTP-узлов и доменов — постатейная смета считается мгновенно.
Ориентиры по объёмам и инфраструктуре
- До 50К писем/день — 1 SMTP-узел и 2 домена.
- 50–200К писем/день — 3 узла и 6 доменов.
- 200К–1М писем/день — 6 узлов и 12 доменов.
- Свыше 1М писем/день — от 10 узлов и 20 доменов.
Доставляемость: почему скрипт — это только начало
Самая распространённая ошибка — считать, что задача решена после установки скрипта. На деле PHP-платформа без прогрева IP и без правильно настроенного MTA будет отправлять письма в спам.
Несколько обязательных условий доставляемости:
- SPF, DKIM, DMARC — тройка DNS-записей аутентификации. Без них массовая почта в инбокс не попадает физически.
- rDNS/PTR — обратная DNS-запись. IP-адрес должен резолвиться в имя отправляющего хоста; отсутствие — маркер спамера.
- Прогрев IP — постепенное наращивание объёма по дневным рампам, начиная с самых активных сегментов базы. Нормы раннего прогрева: 4xx < 3%, баунсы < 2%.
- Обработка баунсов и FBL — hard-баунсы удаляются навсегда, жалобы через Feedback Loop исключаются из базы автоматически.
Своя система против SaaS-сервиса
SaaS-рассылки берут деньги за каждого подписчика или за каждое письмо. Контакты хранятся на серверах сервиса — не у вас. Аккаунт могут заблокировать, базу не отдадут при переезде.
Собственный PHP-скрипт на своём сервере снимает счётчик: один раз установили — и рассылаете без лимитов, модерации и чужих правил. Контакты лежат в вашей БД. Все лицензии MailCore — вечные, платёж разовый, абонплат нет. После запуска остаётся только аренда серверов хостеру — в среднем около 25 USD в месяц за SMTP-узел.
Как запустить: пошаговый путь
- Выбрать платформу под задачу (Interspire, Protosender или Mumara) — посмотреть демо.
- Подготовить VDS под Linux (от 2 CPU / 4 ГБ RAM для старта).
- Зарегистрировать домены и настроить DNS: SPF, DKIM, DMARC, rDNS.
- Установить платформу и MTA (PowerMTA или MailerQ) — MailCore разворачивает за 1 день.
- Запустить прогрев по плану — минимум 7–10 дней перед боевой рассылкой.
- Отправить первую кампанию, отслеживать метрики очередей, баунсов и жалоб.
Полный цикл «от цели до инбокса» — серверы, домены, скрипт, MTA, прогрев и передача управления — MailCore закрывает из одних рук за 5–10 дней.
Часто задаваемые вопросы
Можно ли сделать массовую рассылку только на PHP без дополнительных инструментов?
Для небольших объёмов (до нескольких тысяч писем в день) — да, с помощью PHPMailer и SMTP. Для массовых рассылок (десятки тысяч писем и выше) нужна полноценная платформа плюс MTA, прогрев IP и настроенные DNS-записи. Иначе письма уходят в спам.
Сколько стоит запустить скрипт рассылки на своём сервере?
Лицензия платформы (Interspire, Protosender или Mumara) — 250 USDT разово. Установка — от 50 USDT. Итого от 300 USDT за готовую систему на вашем сервере за один день. Инфраструктура под ключ с MTA, доменами и прогревом — от 1465 USDT.
Какой PHP-скрипт выбрать для массовой рассылки: Interspire, Protosender или Mumara?
Interspire + Maborak — простой и надёжный вариант для больших объёмов, освоит любой. Protosender 8 PRO — для тех, кому нужны AI-автопилот, цепочки и максимум автоматизации. Mumara PRO + ESP — для агентств и enterprise-проектов с API и до 500 потоков отправки.
Нужен ли прогрев IP при использовании своего PHP-скрипта?
Да, без исключений. Без прогрева даже легальная рассылка с нового IP уходит в спам. Прогрев — постепенное наращивание объёма по дневным рампам: 5К → 15К → 40К писем/час с контролем баунсов (<2%) и 4xx-ошибок (<3%) на каждом шаге.
Чем отличается своя платформа рассылок от SaaS-сервиса?
Собственный скрипт на своём сервере: разовая оплата лицензии, без абонплат и платы за подписчика, база данных только у вас, нет рисков блокировки аккаунта. SaaS-сервисы берут ежемесячную плату за подписчиков и хранят ваши контакты на своих серверах.
Как настроить cron для автоматической рассылки на PHP?
Добавьте задачу в crontab: например, «0 8 * * * /usr/bin/php /var/www/html/send_newsletter.php» запустит скрипт каждый день в 08:00. Для Interspire авторответчик запускается через CLI-скрипт auto_responder.php — обычно раз в 5 минут. Вывод в лог (>> /var/log/mailer.log) обязателен для диагностики.
Какие DNS-записи нужны для рассылки через PHP-скрипт?
Обязательны четыре: SPF (разрешает вашим серверам отправлять почту от имени домена), DKIM (криптографическая подпись каждого письма), DMARC (политика для писем, не прошедших аутентификацию) и rDNS/PTR (обратная запись IP → имя хоста). Без этой четвёрки массовая почта в инбокс не попадает.
Какой порт использовать для SMTP в PHPMailer?
Рекомендуется порт 587 с STARTTLS — стандарт для аутентифицированной отправки. Порт 465 (SSL) широко поддерживается, но считается устаревшим. Порт 25 используется только для server-to-server (MTA ↔ MTA) и часто блокируется на хостингах.