Функция 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).