Mail: примеры (PHP)

Работа с электронной почтой через PHP-функцию mail
Раздел: Почта
mail(string $to, string $subject, string $message, string|array $additional_headers = "", string $additional_params = ""): bool
Основные сведения о функции mail()

Функция mail() в PHP предназначена для отправки электронной почты. Она используется в ситуациях, когда необходимо отправить простое текстовое или HTML-сообщение без сложных вложений, например для автоматических уведомлений, форм обратной связи или восстановления пароля.

Аргументы функции
  • to (string): Адрес получателя или список получателей.
  • subject (string): Тема письма.
  • message (string): Тело сообщения.
  • additional_headers (string, опционально): Дополнительные заголовки (From, Cc, Bcc, Content-Type и др.).
  • additional_params (string, опционально): Дополнительные параметры для программы отправки почты (sendmail).
Простые примеры использования
Минимальный вызов
<?php
$result = mail('user@example.com', 'Тема', 'Текст сообщения');
var_dump($result);
?>
bool(true) // Если отправка прошла успешно
Отправка с заголовками
<?php
$to = 'user@example.com';
$subject = 'Приветствие';
$message = 'Здравствуйте!';
$headers = 'From: no-reply@mysite.com' . "\r\n" .
    'Content-Type: text/plain; charset=utf-8';
$result = mail($to, $subject, $message, $headers);
?>
// Письмо отправлено с указанным обратным адресом и кодировкой.
Похожие функции и библиотеки в PHP
PHPMailer и Symfony Mailer

Библиотеки PHPMailer и Symfony Mailer предоставляют расширенный функционал: вложения, шаблоны, SMTP-отправку, SSL/TLS шифрование. Их предпочтительнее использовать для проектов, где требуется надежная и многофункциональная отправка почты.

Функция mb_send_mail()

Аналог mail(), но с автоматической обработкой многобайтовых кодировок. Используется при работе с нелатинскими символами.

Альтернативы в других языках
Python (smtplib)
import smtplib
from email.mime.text import MIMEText

msg = MIMEText('Текст письма', 'plain', 'utf-8')
msg['Subject'] = 'Тема'
msg['From'] = 'from@example.com'
msg['To'] = 'to@example.com'

with smtplib.SMTP('localhost') as server:
    server.send_message(msg)
JavaScript (Node.js, модуль nodemailer)
const nodemailer = require('nodemailer');
let transporter = nodemailer.createTransport({sendmail: true});
transporter.sendMail({
    from: 'from@example.com',
    to: 'to@example.com',
    subject: 'Тема',
    text: 'Текст письма'
});

Mail в MySQL

В MySQL отсутствует встроенная функция для отправки электронной почты. Для этих целей обычно используются внешние SQL-запросы в сочетании с системными событиями или хранимые процедуры, которые взаимодействуют с внешними программами.

Типичные ошибки
Неверная конфигурация сервера
<?php
// Если sendmail не настроен
mail('user@example.com', 'Тема', 'Сообщение');
?>
bool(false) // Функция возвращает false
Некорректные заголовки
<?php
$headers = 'From: некорректный-адрес';
mail('user@example.com', 'Тема', 'Сообщение', $headers);
?>
// Письмо может не отправиться или быть помеченным как спам.
Неверная кодировка
<?php
// Без указания кодировки в заголовках
$subject = 'Тема с кириллицей';
mail('user@example.com', $subject, 'Сообщение');
?>
// Тема может отображаться некорректно у получателя.
Изменения в последних версиях PHP

В PHP 8.0 не было значительных изменений в функции mail(). Начиная с PHP 7.2, параметр additional_params стал опциональным. В более ранних версиях существовали незначительные исправления, связанные с безопасностью и обработкой строк.

Расширенные примеры
Отправка HTML-письма
Пример php
<?php
$to = 'user@example.com';
$subject = 'HTML-письмо';
$message = '<html><body><h1>Заголовок</h1><p>Текст.</p></body></html>';
$headers = 'From: sender@example.com' . "\r\n" .
    'Content-Type: text/html; charset=utf-8' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
Письмо с несколькими получателями
Пример php
<?php
$to = 'user1@example.com, user2@example.com';
$subject = 'Массовая рассылка';
$headers = 'Bcc: hidden@example.com';
mail($to, $subject, 'Сообщение', $headers);
?>
Использование additional_params
Пример php
<?php
// Указание обратного адреса через параметры sendmail
$params = '-fno-reply@mysite.com';
mail('user@example.com', 'Тема', 'Сообщение', '', $params);
?>
Проверка перед отправкой
Пример php
<?php
if (!filter_var('user@example.com', FILTER_VALIDATE_EMAIL)) {
    echo 'Неверный email';
} else {
    mail('user@example.com', 'Тема', 'Сообщение');
}
?>

PHP mail function comments

En
Mail Send mail