Mb send mail: примеры (PHP)

Использование mb_send_mail для отправки email в PHP
Раздел: Многобайтовые строки
mb_send_mail(string $to, string $subject, string $message, array|string $additional_headers = [], ?string $additional_params = null): bool
Описание функции mb_send_mail

Функция mb_send_mail используется для отправки электронных писем с корректной поддержкой многобайтовых кодировок. Она особенно полезна при работе с языками, использующими нелатинские символы, такими как русский, китайский или японский, поскольку автоматически обрабатывает кодировку заголовков и тела письма.

Когда применяется функция

Использование функции актуально в ситуациях, когда требуется отправить email, содержащий символы за пределами ASCII. Это предотвращает проблемы с отображением текста в почтовых клиентах получателей.

Аргументы функции
  1. to (string): Адрес или список адресов получателя.
  2. subject (string): Тема письма.
  3. message (string): Тело письма.
  4. additional_headers (array|string): Дополнительные заголовки. Можно передавать как строку с разделителем CRLF (\r\n), так и ассоциативный массив.
  5. additional_params (string): Дополнительные параметры для программы отправки почты (например, для флагов sendmail).

Функция возвращает булево значение: true при успешной попытке отправки, false при ошибке.

Примеры использования
Простая отправка письма
$to = 'user@example.com';
$subject = 'Тема письма';
$message = 'Текст сообщения с русскими буквами.';
$headers = 'From: sender@example.com';

$result = mb_send_mail($to, $subject, $message, $headers);
var_dump($result);
bool(true)
Отправка с несколькими получателями и заголовками
$to = 'first@example.com, second@example.com';
$subject = 'Приветствие';
$message = 'Добрый день!';
$headers = [
    'From' => 'robot@site.com',
    'Reply-To' => 'support@site.com',
    'Content-Type' => 'text/plain; charset=UTF-8',
    'X-Mailer' => 'PHP/'.phpversion()
];

$result = mb_send_mail($to, $subject, $message, $headers);
echo $result ? 'Письмо отправлено' : 'Ошибка';
Письмо отправлено
Использование дополнительных параметров
$to = 'user@example.com';
$subject = 'Тест';
$message = 'Сообщение';
$headers = 'From: test@example.com';
$params = '-f bounce@example.com';

$result = mb_send_mail($to, $subject, $message, $headers, $params);
var_dump($result);
bool(true)
Альтернативные функции в PHP
mail()

Базовая функция отправки почты. Не поддерживает автоматическую обработку многобайтовых строк. Требует ручного указания кодировок в заголовках.

Библиотеки (PHPMailer, Swift Mailer)

Предоставляют расширенный функционал: вложения, SMTP-авторизацию, HTML-письма, шаблоны. Используются для сложных задач рассылки.

Рекомендации по выбору
  • mb_send_mail подходит для простых писем с национальными символами.
  • mail() применяется для ASCII-текстов или при полном контроле кодировок.
  • Библиотеки выбирают для проектов с массовыми или сложными рассылками.
Типичные ошибки
Некорректные заголовки
// Неправильно: отсутствует перевод строки между заголовками
$headers = "From: test@example.comReply-To: support@example.com";
$result = mb_send_mail('to@example.com', 'Тема', 'Текст', $headers);
var_dump($result);
bool(false) // Письмо не отправлено
Неправильная кодировка в заголовках
// Если mbstring.internal_encoding не установлена, возможны искажения
$subject = 'Проверка';
// Без mb_send_mail тема может отображаться некорректно
$result = mail('to@example.com', $subject, 'Текст');

Рекомендация: использовать mb_send_mail или явно указывать кодировку в заголовках для функции mail().

Пустые обязательные параметры
$result = mb_send_mail('', '', '');
var_dump($result);
bool(false)
Изменения в новых версиях PHP

В PHP 8.0 тип параметра additional_headers был изменен с string на array|string. Это позволяет передавать заголовки в виде ассоциативного массива, что повышает удобство и безопасность.

Пример нового синтаксиса
// Работает в PHP 8.0+
$headers = [
    'From' => 'sender@example.com',
    'Content-Type' => 'text/html; charset=UTF-8'
];
$result = mb_send_mail('user@example.com', 'Тема', 'Сообщение', $headers);

Версии PHP до 7.4 требовали передавать заголовки в виде строки.

Расширенные примеры
Отправка HTML-письма
Пример php
$to = 'user@example.com';
$subject = 'HTML-письмо';
$message = '<html><body><h1>Заголовок</h1><p>Текст с <span class="fw-bold">выделением</span>.</p></body></html>';
$headers = [
    'From' => 'site@example.com',
    'Content-Type' => 'text/html; charset=UTF-8',
    'MIME-Version' => '1.0'
];

$result = mb_send_mail($to, $subject, $message, $headers);
Письмо с несколькими адресами и скрытыми копиями
Пример php
$to = 'primary@example.com, second@example.com';
$subject = 'Рассылка';
$message = 'Общее сообщение.';
$headers = [
    'From' => 'news@domain.com',
    'Cc' => 'team@domain.com',
    'Bcc' => 'secret@domain.com, hidden@domain.com'
];

mb_send_mail($to, $subject, $message, $headers);
Использование callable-функции для логирования
Пример php
// Пример с обработкой результата
$result = mb_send_mail('user@example.com', 'Отчет', 'Данные', 'From: app@example.com');

if ($result) {
    file_put_contents('mail.log', date('Y-m-d H:i:s').' Успешно\n', FILE_APPEND);
} else {
    file_put_contents('mail.log', date('Y-m-d H:i:s').' Ошибка\n', FILE_APPEND);
}
Динамическое формирование заголовков
Пример php
$headersArray = [
    'From' => 'noreply@' . $_SERVER['HTTP_HOST'],
    'X-Priority' => '1',
    'X-Mailer' => 'Custom Script'
];

// Добавление заголовка на основе условия
if ($isUrgent) {
    $headersArray['Priority'] = 'urgent';
}

$headersString = '';
foreach ($headersArray as $name => $value) {
    $headersString .= "$name: $value\r\n";
}

mb_send_mail('recipient@example.com', 'Тема', 'Текст', $headersString);
Аналоги в других языках

Mb send mail в Python

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg['Subject'] = 'Тема'
msg['From'] = 'sender@example.com'
msg['To'] = 'user@example.com'
msg.set_content('Текст письма')
msg.set_charset('utf-8')

with smtplib.SMTP('localhost') as s:
    s.send_message(msg)

Особенность: требует явной настройки SMTP и ручного управления кодировками.

JavaScript (Node.js)
const nodemailer = require('nodemailer');

let transporter = nodemailer.createTransport({
    sendmail: true,
    newline: 'unix',
    path: '/usr/sbin/sendmail'
});

transporter.sendMail({
    from: 'sender@example.com',
    to: 'user@example.com',
    subject: 'Тема',
    text: 'Текст письма'
});

Особенность: асинхронная отправка, требуется отдельная библиотека.

Mb send mail в MySQL

Прямой отправки писем нет, но можно использовать триггеры и системные события для вызова внешних программ.

PHP mb_send_mail function comments

En
Mb send mail Send encoded mail