Mb send mail: примеры (PHP)
mb_send_mail(string $to, string $subject, string $message, array|string $additional_headers = [], ?string $additional_params = null): boolФункция mb_send_mail используется для отправки электронных писем с корректной поддержкой многобайтовых кодировок. Она особенно полезна при работе с языками, использующими нелатинские символы, такими как русский, китайский или японский, поскольку автоматически обрабатывает кодировку заголовков и тела письма.
Использование функции актуально в ситуациях, когда требуется отправить email, содержащий символы за пределами ASCII. Это предотвращает проблемы с отображением текста в почтовых клиентах получателей.
- to (string): Адрес или список адресов получателя.
- subject (string): Тема письма.
- message (string): Тело письма.
- additional_headers (array|string): Дополнительные заголовки. Можно передавать как строку с разделителем CRLF (
\r\n), так и ассоциативный массив. - 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)
Базовая функция отправки почты. Не поддерживает автоматическую обработку многобайтовых строк. Требует ручного указания кодировок в заголовках.
Предоставляют расширенный функционал: вложения, 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 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 требовали передавать заголовки в виде строки.
$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);
$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);
// Пример с обработкой результата
$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);
}
$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 и ручного управления кодировками.
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
Прямой отправки писем нет, но можно использовать триггеры и системные события для вызова внешних программ.