Як надіслати електронний лист за допомогою функції PHP mail().

⚡ Розумний підсумок

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

  • ???? Що робить mail(): Функція mail() надсилає електронний лист зі скрипта, приймаючи дані одержувача, тему, повідомлення та додаткові заголовки.
  • 📨 SMTP-транспорт: Пошта PHP використовує SMTP, хост, порт та автентифікація якого встановлюються у файлі конфігурації php.ini.
  • 📋 Копія та прихована копія: Додаткові заголовки додають одержувачів копії та прихованої копії, приховуючи поле «Прихована копія» від інших одержувачів.
  • 🛡️ Очистити вхідні дані: filter_var з FILTER_SANITIZE_EMAIL та FILTER_VALIDATE_EMAIL блокує введення заголовка з вхідних даних контактної форми.
  • 🔒 Убезпечте Mail: Шифрування з’єднання за допомогою SSL або TLS захищає вміст повідомлення від зчитування під час передачі.
  • 🧰 Використовуйте PHPMailер: PHPMailer додає SMTP-автентифікацію, вкладення та електронну пошту HTML, що робить її надійнішою, ніж raw mail().
  • 🤖 AI Assist: Інструменти штучного інтелекту можуть налаштовувати PHPMailз SMTP та запропонуйте виправлення, які допоможуть запобігти потраплянню ваших електронних листів у папку зі спамом.

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».

  • Відкрийте його за допомогою Блокнота або будь-якого текстового редактора. У цьому прикладі ми використовуватимемо Блокнот. Натисніть меню Редагувати.

простий Mail Transmission протокол

  • Натисніть на меню «Знайти…»

простий Mail Transmission протокол

  • З’явиться діалогове вікно «Пошук»

простий Mail Transmission протокол

  • Натисніть кнопку «Знайти далі»

простий Mail Transmission протокол

Знайдіть записи в розділі [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);
?>

вихід:

простий Mail Transmission протокол

Примітка: у наведеному вище прикладі використовуються лише 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-автентифікацію, вбудоване шифрування, підтримку вкладень та чіткішу обробку помилок, тому його рекомендують для робочої електронної пошти.

Поширені запитання

Найпоширеніша причина – відсутність налаштованого поштового сервера на локальному хості. Встановіть правильні значення SMTP у php.ini або скористайтеся PHP.Mailз автентифікованим обліковим записом SMTP. Також перевірте журнал помилок сервера та папку зі спамом.

Додайте заголовки, які встановлюють MIME-Version на 1.0 та Content-Type на text/html, а потім додайте HTML-розмітку в тіло повідомлення. PHPMailer обробляє це автоматично, коли ви встановлюєте його опцію isHTML(true).

FILTER_SANITIZE_STRING застарів, починаючи з PHP 8.1. Використовуйте htmlspecialchars() для екранування виводу для відображення або спеціальний валідатор, такий як FILTER_VALIDATE_EMAIL, залежно від того, чи ви очищаєте, чи перевіряєте значення.

Так. Надайте штучному інтелекту (AI) ваш SMTP-хост, порт і тип безпеки, і він зможе згенерувати повний PHP-код.Mailналаштування з автентифікацією, відправником, одержувачами та обробкою помилок. Зберігайте облікові дані у змінних середовища, а не в коді.

Так. Штучний інтелект може консультувати щодо записів SPF, DKIM та DMARC, використовуючи автентифікованого SMTP-відправника, уникаючи слів-тригерів спаму та встановлюючи дійсну адресу відправника, а потім допомогти вам перевірити доставку.

Підсумуйте цей пост за допомогою: