Як надіслати електронний лист за допомогою функції PHP mail().
⚡ Розумний підсумок
PHP mail – це вбудована функція, яка надсилає електронну пошту безпосередньо зі скрипта PHP, використовуючи налаштування SMTP сервера. У цьому посібнику розглядається синтаксис та параметри mail(), налаштування SMTP у php.ini, очищення введених користувачем даних за допомогою filter_var, надсилання захищеної пошти та використання PHP.Mailдля надійної доставки.

Що таке PHP-пошта?
PHP mail — це вбудована функція PHP, яка використовується для надсилання електронних листів зі скриптів PHP.
Функція пошти приймає такі параметри:
- Адреса електронної пошти
- Тема
- Повідомлення
- Адреси електронної пошти
Чому і коли використовувати PHP пошту
Функція пошти корисна в багатьох ситуаціях:
- Це економічно ефективний спосіб сповіщення користувачів про важливі події.
- Дозвольте користувачам зв’язуватися з вами електронною поштою, надавши форму зв’язку з нами на веб-сайті, яка надсилає наданий вміст електронною поштою.
- Розробники можуть використовувати його для отримання системних помилок електронною поштою.
- Ви можете використовувати його для надсилання електронних листів своїм підписникам на інформаційні бюлетені.
- Ви можете використовувати його для надсилання посилань для скидання пароля користувачам, які забули свої паролі.
- Ви можете використовувати його для надсилання посилань для активації та підтвердження електронною поштою. Це корисно під час реєстрації користувачів та перевірки їхніх адрес електронної пошти.
Надсилання пошти за допомогою PHP
Функція mail у PHP має наступний базовий синтаксис.
<?php mail($to_email_address,$subject,$message,[$headers],[$parameters]); ?>
ТУТ,
- “$to_email_address” – адреса електронної пошти одержувача листа
- «$subject» – це тема електронного листа
- “$message” – це повідомлення, яке потрібно надіслати.
- «[$headers]» необов’язковий; його можна використовувати для включення такої інформації, як «Копія» та «Прихована копія».
- CC – це абревіатура від carbon copy (копія). Вона використовується, коли потрібно надіслати копію зацікавленій особі, тобто електронний лист зі скаргою, надісланий компанії, також можна надіслати як CC до ради зі скарг.
- BCC – це абревіатура від «прихована копія». Вона схожа на CC, але адреси електронної пошти, зазначені в розділі BCC, не відображаються іншим одержувачам.
простий Mail Transmission Протокол (SMTP)
PHP пошта використовує Simple Mail Transmission Протокол (SMTP) для надсилання пошти.
На розміщеному сервері налаштування SMTP вже мають бути встановлені.
Параметри SMTP-пошти можна налаштувати з файлу «php.ini» в папці встановлення PHP.
Щоб налаштувати параметри SMTP на вашому локальному хості, припускаючи, що ви використовуєте XAMPP на Windows, знайдіть файл «php.ini» в каталозі «C:\xampp\php».
- Відкрийте його за допомогою Блокнота або будь-якого текстового редактора. У цьому прикладі ми використовуватимемо Блокнот. Натисніть меню Редагувати.
- Натисніть на меню «Знайти…»
- З’явиться діалогове вікно «Пошук»
- Натисніть кнопку «Знайти далі»
Знайдіть записи в розділі [function mail]. Рядки за замовчуванням зазвичай виглядають так:
- ; SMTP = локальний хост
- ; smtp_port = 25
Видаліть крапку з комою перед SMTP та smtp_port і встановіть SMTP на ваш SMTP сервер і порт вашого SMTP-порту. Ваші налаштування мають виглядати так:
- SMTP = smtp.example.com
- smtp_port = 25
Примітка: налаштування SMTP можна отримати у вашого постачальника веб-хостингу. Якщо сервер вимагає автентифікації, додайте такі рядки:
- auth_username = example_username@example.com
- auth_password = приклад_паролю
Збережіть нові зміни та перезапустіть Apache сервера.
PHP Mail Приклад
Давайте тепер розглянемо приклад, який надсилає простий електронний лист.
<?php $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; mail($to_email,$subject,$message,$headers); ?>
вихід:
Примітка: у наведеному вище прикладі використовуються лише 4 обов’язкові параметри. Вам слід замінити вигадану адресу електронної пошти на справжню.
Очищення електронної пошти, введеної користувачем
У наведеному вище прикладі для спрощення використовуються жорстко закодовані значення у вихідному коді для адреси електронної пошти та інших деталей.
Припустимо, вам потрібно створити форму зв'язку з нами, де користувачі заповнюють дані, а потім надсилають їх.
- Користувачі можуть випадково або навмисно вставляти код у заголовки, що може призвести до розсилки спаму.
- Щоб захистити вашу систему від таких атак, ви можете створити спеціальну функцію, яка дезінфікує та перевіряє значення перед надсиланням електронного листа.
Давайте створимо власну функцію, яка перевіряє та очищує адресу електронної пошти за допомогою вбудованої функції filter_var. Функція filter_var використовується для очищення та перевірки введених користувачем даних.
Він має наступний базовий синтаксис.
<?php filter_var($field, SANITIZATION_TYPE); ?>
ТУТ,
- «filter_var(…)» — це функція перевірки та очищення
- «$field» — це значення поля, яке потрібно відфільтрувати.
- «ТИП_САНІТИЗАЦІЇ» – це тип санітарної обробки, який буде виконано на полі, наприклад:
- FILTER_VALIDATE_EMAIL – повертає значення true для дійсних адрес електронної пошти та false для недійсних адрес електронної пошти.
- FILTER_SANITIZE_EMAIL – видаляє неприпустимі символи з адрес електронної пошти, тому адреса з випадковими символами скорочується до info@domain.com.
- ФІЛЬТР_САНІТИЗАЦІЯ_URL – видаляє недозволені символи з URLс, залишаючи чисту адресу, таку як https://www.example.com.
- FILTER_SANITIZE_STRING – видаляє теги з рядкових значень, таким чином am bold стає am bold. Зверніть увагу, що цей фільтр застарів у PHP 8.1; замість нього використовуйте htmlspecialchars().
Наведений нижче код використовує спеціальну функцію для надсилання захищеної пошти.
<?php function sanitize_my_email($field) { $field = filter_var($field, FILTER_SANITIZE_EMAIL); if (filter_var($field, FILTER_VALIDATE_EMAIL)) { return true; } else { return false; } } $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; // check if the email address is invalid $secure_check = sanitize_my_email($to_email); if ($secure_check == false) { echo "Invalid input"; } else { // send email mail($to_email, $subject, $message, $headers); echo "This email is sent using PHP Mail"; } ?>
вихід:
Убезпечте Mail
Електронні листи можуть бути перехоплені під час передачі ненавмисними одержувачами.
Це може розкрити вміст електронного листа небажаним одержувачам.
Безпечна пошта вирішує цю проблему, transmitнадсилання електронних листів через зашифроване з’єднання за допомогою SSL або TLS, наприклад, SMTP через SSL на порту 465 або STARTTLS на порту 587.
Шифрування кодує повідомлення перед надсиланням, тому його може прочитати лише поштовий сервер одержувача.
PHPMailер: Краща альтернатива mail()
Для реальних застосунків більшість розробників використовують PHPMailбібліотека er замість функції mail() у форматі error. PHPMailer автентифікується за допомогою зовнішнього SMTP-сервера, що значно покращує доставку, а також спрощує надсилання вкладень та електронних листів у форматі HTML.
Встановіть його за допомогою Composer, а потім надсилайте пошту через автентифіковане, зашифроване SMTP-з’єднання, як показано нижче.
<?php use PHPMailer\PHPMailer\PHPMailer; require 'vendor/autoload.php'; $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'user@example.com'; $mail->Password = 'secret'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('noreply@example.com', 'My App'); $mail->addAddress('name@example.com'); $mail->Subject = 'Testing PHPMailer'; $mail->Body = 'This email is sent using PHPMailer over SMTP'; $mail->send(); ?>
Порівняно з mail(), PHPMailer забезпечує SMTP-автентифікацію, вбудоване шифрування, підтримку вкладень та чіткішу обробку помилок, тому його рекомендують для робочої електронної пошти.






