Функция mail() встроена в PHP и используется для отправки электронных писем непосредственно с веб-сервера. Это простой способ отправки уведомлений, сообщений контактных форм, подтверждений заказов и других типов сообщений.
Подходит для базовой функциональности электронной почты без использования внешних библиотек.
Принцип работы mail()
Когда вы вызываете функцию mail(), PHP передает письмо системному агенту передачи почты (MTA), установленному на сервере (обычно Sendmail или Postfix). Затем MTA обрабатывает и доставляет сообщение по указанному адресу.
Синтаксис
mail(to, subject, message, headers, parameters);
Параметры
| Параметр | Описание |
|---|---|
| $to | Адрес электронной почты получателя. Можно указать несколько адресов, разделенных запятыми. |
| $subject | Тема письма. Не должна содержать разрывов строк. |
| $message | Основная часть сообщения. |
| $headers | Дополнительные заголовки, такие как From, Reply-To, Cc, Bcc и т. д. |
| $parameters | Дополнительные параметры, например, указание отправителя для Sendmail (-f). |
Простой пример
<?php
$to = "user@example.com";
$subject = "Test Email";
$message = "Hello! This is a test email sent using PHP.";
$headers = "From: webmaster@yourdomain.com";
mail($to, $subject, $message, $headers);
?> Важные заметки
1. От: Заголовок обязателен
Если вы не укажете заголовок From:, большинство почтовых серверов отклонят сообщение как подозрительное или спам.
$headers = "From: noreply@yourdomain.com";
2. Форматирование многострочных сообщений
Используйте \r\n для разделения строк в сообщении:
$message = "Здравствуйте,\r\n\r\nСпасибо за ваш заказ.\r\n\r\nЛучшие пожелания,\r\nВаша команда";
3. Несколько заголовков
Используйте \r\n для разделения нескольких заголовков, таких как Reply-To, Cc и Bcc:
$headers = "From: admin@yourdomain.com\r\n";
$headers .= "Reply-To: support@yourdomain.com\r\n";
$headers .= "Cc: someone@yourdomain.com\r\n";
Пример: Отправка электронной почты в формате HTML (только текст)
Функция mail() не поддерживает вложения. Но вы можете отправлять HTML-письма или задавать тип содержимого вручную:
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: info@yourdomain.com";
$message = "<h1>Hello!</h1><p>Your order has been received.</p>";
mail("user@example.com", "Order Confirmation", $message, $headers);Общие проблемы и решения
| Проблема | Причина / решение |
|---|---|
| Электронное письмо не доставлено | Отсутствует заголовок From: или IP-адрес сервера находится в черном списке |
| Письмо вообще не отправляется | Не установлен MTA (например, требуется Sendmail/Postfix) |
| Ошибка: функция mail() отключена | mail() отключен в php.ini (часто это связано с политикой хоста) |
| Русский текст отображается как ???? | В заголовках не установлен параметр UTF-8 |
| Письма попадают в спам | Неправильный From, отсутствие SPF/DKIM или неправильно настроенный домен |
Заключение
Функция mail() – это базовый, но мощный инструмент для отправки электронных писем непосредственно из PHP-скриптов. Это:
- Проста в использовании
- Не требует дополнительных библиотек
- Подходит для внутренних уведомлений, контактных форм и автоответчиков
Однако не забывайте о его ограничениях:
- Зависит от почтовой конфигурации сервера
- Не поддерживает вложения
- Может быть отключен по умолчанию в некоторых средах виртуального хостинга
Если вы планируете регулярно отправлять электронные письма, убедитесь, что ваш сервер правильно настроен для работы с исходящей почтой (установлен Sendmail/Postfix, настроены записи SPF/DKIM и включена функция mail() в php.ini).


