Функція mail() вбудована в PHP і використовується для надсилання електронних листів безпосередньо з веб-сервера. Це простий спосіб надсилати сповіщення, повідомлення контактних форм, підтвердження замовлень та інші типи повідомлень.

Підходить для базового функціоналу електронної пошти без використання зовнішніх бібліотек.

Як працює mail()

Коли ви викликаєте функцію mail(), PHP передає електронний лист системному агенту передачі пошти (MTA), встановленому на сервері (зазвичай Sendmail або Postfix). Потім MTA обробляє і доставляє повідомлення на вказану адресу.

Синтаксис

mail(кому, тема, повідомлення, заголовки, параметри);

Параметри

ПараметрОпис
$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  = "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);
Поширені проблеми та шляхи їх вирішення
ПроблемаПричина / Рішення
Імейл не доставленоВідсутній: заголовок або IP-адреса сервера в чорному списку
Імейл не надсилається взагаліНе встановлено MTA (наприклад, потрібен Sendmail/Postfix)
Помилка: функцію mail() відключеноmail() відключено в php.ini (часто через політику хоста)
Український текст відображається як ????У заголовках не встановлено кодування UTF-8
Листи потрапляють до спамуНеправильно вказано From, відсутній SPF/DKIM або неправильно налаштований домен

Висновок

Функція mail() є базовим, але потужним інструментом для надсилання електронних листів безпосередньо з PHP-скриптів. Так і є:

  • Проста у використанні
  • Не потребує додаткових бібліотек
  • Підходить для внутрішніх сповіщень, контактних форм та автовідповідачів

Однак пам’ятайте про його обмеження:

  • Залежить від конфігурації пошти на сервері
  • Не підтримує вкладені файли
  • Може бути вимкнений за замовчуванням у деяких середовищах віртуального хостингу

Якщо ви плануєте регулярно надсилати листи, переконайтеся, що ваш сервер належним чином налаштований для вихідної пошти (з встановленим Sendmail/Postfix, налаштованими SPF/DKIM-записами та увімкненою функцією mail() в php.ini).