Работа с wp_mail() и отправкой email в WordPress
Функция wp_mail()
— это основная функция WordPress для отправки электронной почты, которая предоставляет удобный интерфейс для работы с PHP-функцией mail()
.
Основной синтаксис
wp_mail( $to, $subject, $message, $headers, $attachments );
Параметры:
$to
(строка/массив) — email адрес(а) получателя$subject
(строка) — тема письма$message
(строка) — тело письма$headers
(строка/массив) — дополнительные заголовки (необязательно)$attachments
(строка/массив) — пути к файлам для вложения (необязательно)
Простой пример отправки письма
$to = 'recipient@example.com';
$subject = 'Тема письма';
$message = 'Это тестовое письмо, отправленное через wp_mail().';
$sent = wp_mail($to, $subject, $message);
if ($sent) {
// Письмо успешно отправлено
} else {
// Ошибка отправки
}
Расширенные примеры
1. Отправка HTML-писем
$to = 'recipient@example.com';
$subject = 'HTML письмо';
$message = '
<html>
<head>
<title>HTML письмо</title>
</head>
<body>
<h1>Привет!</h1>
<p>Это <strong>HTML-письмо</strong>, отправленное через WordPress.</p>
</body>
</html>
';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail($to, $subject, $message, $headers);
2. Отправка нескольким получателям
$to = array(
'recipient1@example.com',
'recipient2@example.com'
);
$subject = 'Письмо нескольким получателям';
$message = 'Это письмо будет отправлено нескольким получателям.';
wp_mail($to, $subject, $message);
3. Добавление вложений
$to = 'recipient@example.com';
$subject = 'Письмо с вложением';
$message = 'Проверьте вложение к этому письму.';
$attachments = array(
WP_CONTENT_DIR . '/uploads/file.pdf'
);
wp_mail($to, $subject, $message, '', $attachments);
4. Установка From заголовка
$to = 'recipient@example.com';
$subject = 'Письмо с кастомным From';
$message = 'Это письмо имеет кастомный адрес отправителя.';
$headers = array(
'From: Имя Отправителя <sender@example.com>',
'Content-Type: text/html; charset=UTF-8'
);
wp_mail($to, $subject, $message, $headers);
Настройка SMTP для wp_mail()
По умолчанию WordPress использует PHP-функцию mail()
, но лучше настроить SMTP для надежной доставки:
1. Использование плагина
Популярные плагины: WP Mail SMTP, Post SMTP, Easy WP SMTP
2. Ручная настройка через functions.php
add_action('phpmailer_init', 'configure_smtp');
function configure_smtp($phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'your@example.com';
$phpmailer->Password = 'yourpassword';
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = 'your@example.com';
$phpmailer->FromName = 'Your Name';
}
Фильтры и хуки для wp_mail()
WordPress предоставляет несколько хуков для кастомизации отправки почты:
// Изменение параметров письма перед отправкой
add_filter('wp_mail', function($args) {
$args['subject'] = '[Мой сайт] ' . $args['subject'];
return $args;
});
// Использование другого метода отправки
add_action('wp_mail_failed', function($error) {
error_log('Ошибка отправки письма: ' . $error->get_error_message());
});
Решение распространенных проблем
- Письма не доставляются:
- Проверьте настройки SMTP
- Убедитесь, что хостинг не блокирует отправку
- Проверьте спам-папку получателя
- Письма отправляются как plain text:
- Убедитесь, что установлен заголовок
Content-Type: text/html
- Кодировка символов:
- Установите заголовок
charset=UTF-8
- Ограничения на хостинге:
- Некоторые хостинги ограничивают количество отправляемых писем в час
Логирование отправки писем
Для отладки можно добавить логирование:
add_action('wp_mail_failed', 'log_mail_errors', 10, 1);
function log_mail_errors($wp_error) {
$fn = ABSPATH . '/mail.log';
$fp = fopen($fn, 'a');
fputs($fp, "[" . date('Y-m-d H:i:s') . "] Mail error: " . $wp_error->get_error_message() . "\n");
fclose($fp);
}
Функция wp_mail()
— это мощный инструмент WordPress для работы с электронной почтой, который при правильной настройке обеспечивает надежную доставку сообщений.