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


