Отправка писем — важный компонент многих сайтов на WordPress: уведомления, формы обратной связи, регистрации пользователей и многое другое. Однако по умолчанию WordPress использует функцию wp_mail(), которая часто вызывает задержки в работе сайта и имеет проблемы с доставкой писем. В этой статье рассмотрим основные способы оптимизации отправки почты в WordPress, снизим нагрузку на сервер и повысим надежность доставки.
Почему стандартная отправка писем в WordPress медленная и ненадежная
Стандартный вызов wp_mail() использует функцию mail() PHP, которая напрямую обращается к серверу почты. Такой подход имеет несколько недостатков:
- Блокировка процесса: Вызов
mail()синхронный, поэтому пока письмо отправляется, страница ждет завершения операции, что увеличивает время загрузки. - Ограничения хостинга: Многие shared-хостинги ограничивают скорость и количество отправляемых писем, что приводит к ошибкам и задержкам.
- Проблемы с доставкой: Письма могут попадать в спам из-за отсутствия правильной настройки SPF, DKIM, DMARC, а также из-за некорректного SMTP-сервера.
Чтобы решить эти проблемы, нужно вынести отправку почты в отдельный процесс и использовать профессиональные SMTP-сервисы.
Использование очереди для асинхронной отправки писем в WordPress
Основная идея — не ждать отправки почты в момент обработки запроса пользователя, а поставить письмо в очередь и отправить позже, в фоне. Это значительно уменьшает задержки при загрузке страниц.
Для реализации очереди можно использовать плагин Clearfy Pro, который умеет управлять задачами и оптимизировать фоновую работу сайта. Также подойдет плагин WP GPT для создания кастомных скриптов отправки.
Пример реализации собственной очереди с использованием WP-Cron
Ниже пример простейшего кода, который ставит письма в очередь и отправляет их в отложенной задаче:
function wpspeed_enqueue_mail($to, $subject, $message, $headers = '', $attachments = []) {
$mails = get_option('wpspeed_mail_queue', []);
$mails[] = compact('to', 'subject', 'message', 'headers', 'attachments');
update_option('wpspeed_mail_queue', $mails);
}
function wpspeed_send_queued_mails() {
$mails = get_option('wpspeed_mail_queue', []);
if (empty($mails)) return;
foreach ($mails as $key => $mail) {
wp_mail($mail['to'], $mail['subject'], $mail['message'], $mail['headers'], $mail['attachments']);
unset($mails[$key]);
}
update_option('wpspeed_mail_queue', $mails);
}
add_action('wpspeed_send_mail_cron', 'wpspeed_send_queued_mails');
if (!wp_next_scheduled('wpspeed_send_mail_cron')) {
wp_schedule_event(time(), 'minute', 'wpspeed_send_mail_cron');
}В этом примере письма сначала добавляются в опцию, а затем отправляются каждую минуту через WP-Cron. Такой подход уменьшает задержки при загрузке страниц.
Использование SMTP-сервисов для надежной отправки почты
Для повышения доставки писем рекомендуем подключать SMTP-серверы, например, Clearfy Pro поддерживает удобное подключение SMTP. Также популярны плагины:
- WP Mail SMTP — один из самых популярных плагинов для подключения SMTP;
- Post SMTP Mailer/Email Log — с расширенной поддержкой логов и отложенной отправки;
- Easy WP SMTP — простой и легкий в настройке.
SMTP-сервисы, на которые стоит обратить внимание:
- SendGrid
- Mailgun
- Amazon SES
- Gmail SMTP (ограниченно)
Подключение SMTP позволит избежать попадания писем в спам и повысит скорость обработки.
Оптимизация кода отправки писем в кастомных формах
Если у вас есть кастомные формы, например, контактные или регистрации, важно правильно организовать отправку почты. Вот пример функции, которая отправляет письмо через очередь и SMTP, используя наш префикс wpspeed_:
function wpspeed_send_mail_async($to, $subject, $message, $headers = []) {
// Добавляем письмо в очередь
wpspeed_enqueue_mail($to, $subject, $message, $headers);
}
// Пример использования:
wpspeed_send_mail_async('user@example.com', 'Подтверждение регистрации', 'Спасибо за регистрацию!');Такой подход позволит разгрузить основное выполнение кода и избежать блокировок.
Мониторинг и логирование отправленных писем
Для контроля работоспособности и поиска проблем полезно вести логи отправки. Рекомендуется использовать плагины с логированием, например, Post SMTP Mailer или расширять свой код:
function wpspeed_log_mail_status($to, $subject, $result) {
$log = get_option('wpspeed_mail_log', []);
$log[] = [
'to' => $to,
'subject' => $subject,
'result' => $result,
'time' => current_time('mysql')
];
update_option('wpspeed_mail_log', $log);
}Логи помогут видеть, какие письма доставлены, а какие требуют внимания.
Заключение: комплексный подход к оптимизации отправки писем
Оптимизация отправки писем в WordPress — это сочетание нескольких техник:
- Перевод отправки в асинхронный режим через очередь и WP-Cron;
- Использование надежных SMTP-сервисов для повышения доставки;
- Оптимизация кода отправки в кастомных формах;
- Мониторинг и логирование отправленных писем;
- Использование профессиональных плагинов, таких как Clearfy Pro, для удобства настройки и управления.
Реализовав эти рекомендации, вы заметно ускорите работу сайта и сделаете доставку писем более надежной.