Вопрос «как сделать рассылку на 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);
?>
Ограничение mail(): Функция не поддерживает SMTP-аутентификацию, DKIM-подпись и очередь повторных попыток. Для хоть сколько-нибудь серьёзной рассылки используйте PHPMailer или полноценную платформу.

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}";
}
?>
Частая ошибка: Запускают рассылку через PHPMailer на обычный SMTP Gmail или Yandex, упираются в лимиты провайдера (Gmail — 500 писем/день, Yandex — 500 писем/день) и думают, что «PHP-рассылка не работает». Проблема не в PHP — в отсутствии собственной отправляющей инфраструктуры.

Сравнение решений: 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
Практический совет: В Interspire с модулем Multi-Thread v4.0 очередь запускается через CLI напрямую, минуя веб-сервер. Это позволяет использовать все CPU-ядра сервера и отправлять до нескольких тысяч писем в минуту без таймаутов Apache/Nginx. Добавьте вывод в лог (>> /var/log/mailer.log) — так проще диагностировать зависания.

Что нужно для массовой рассылки на PHP: полный стек

Профессиональный скрипт рассылки писем на PHP — это не просто mail(). Это связка из нескольких слоёв:

  1. Платформа рассылок — веб-интерфейс для управления базой, кампаниями и шаблонами. Именно здесь «живёт» PHP-код.
  2. MTA (Mail Transfer Agent) — транспортный сервер, который принимает письма от платформы и доставляет их на серверы Gmail, Mail.ru, Yahoo. Без MTA платформа — просто интерфейс без двигателя.
  3. DNS-записи — SPF, DKIM, DMARC и rDNS/PTR. Без них массовая почта в инбокс не попадает.
  4. Прогрев 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, вечная лицензия, без абонплат.

Практика нашей команды: Interspire + Maborak Multiple MTA — «простая и выносливая машина» для больших объёмов. Модуль оптимизирован под PowerMTA: MTA-группы, ротация IP и многопоточная отправка работают без усложнения интерфейса. Освоит любой — даже без опыта в email-инфраструктуре.

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, вечная лицензия.

Практический совет: Все три платформы можно потрогать на живых стендах demo.mailcore-system.com — реальные инсталляции с открытым доступом. Данные периодически сбрасываются, логины на странице демо. Смотрите перед покупкой, а не после.

Реальный кейс: 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 исключаются из базы автоматически.
Практика нашей команды: Правильный прогрев даёт 95%+ попадание в инбокс. Рампа выглядит так: дни 1–3 — 5К писем/час по сегменту активных за месяц; дни 4–7 — 15К/час; с 8-го дня — production 40К/час после AI-ревью метрик. Без этого этапа не стоит запускать ни один новый IP, какой бы скрипт вы ни использовали.

Своя система против SaaS-сервиса

SaaS-рассылки берут деньги за каждого подписчика или за каждое письмо. Контакты хранятся на серверах сервиса — не у вас. Аккаунт могут заблокировать, базу не отдадут при переезде.

Собственный PHP-скрипт на своём сервере снимает счётчик: один раз установили — и рассылаете без лимитов, модерации и чужих правил. Контакты лежат в вашей БД. Все лицензии MailCore — вечные, платёж разовый, абонплат нет. После запуска остаётся только аренда серверов хостеру — в среднем около 25 USD в месяц за SMTP-узел.

Как запустить: пошаговый путь

  1. Выбрать платформу под задачу (Interspire, Protosender или Mumara) — посмотреть демо.
  2. Подготовить VDS под Linux (от 2 CPU / 4 ГБ RAM для старта).
  3. Зарегистрировать домены и настроить DNS: SPF, DKIM, DMARC, rDNS.
  4. Установить платформу и MTA (PowerMTA или MailerQ) — MailCore разворачивает за 1 день.
  5. Запустить прогрев по плану — минимум 7–10 дней перед боевой рассылкой.
  6. Отправить первую кампанию, отслеживать метрики очередей, баунсов и жалоб.

Полный цикл «от цели до инбокса» — серверы, домены, скрипт, 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) и часто блокируется на хостингах.