2.8.18. Функція PHP mail

Увага!

При неправильному використанні функції можуть виникати проблеми з доставкою — надіслані листи можуть потрапляти в спам або відхилятися поштовим сервером одержувача. Щоб уникнути цього, див. Правильне надсилання пошти з сайту.
Приклад використання функції див. у Перевірка роботи вихідної пошти через PHP mail.

Функція PHP mail дозволяє надсилати листи з веб-сервера без авторизації в існуючій поштовій скриньці. Вона корисна для швидкого налаштування надсилання листів, але при цьому без певних налаштувань надіслані листи з великою ймовірністю можуть потрапляти в спам або бути відхилені. Часто це пов'язано із зазначенням некоректного заголовка FROM або його відсутністю, а також неможливістю використання DKIM.

При вказанні заголовка FROM важливо враховувати, яка саме поштова скринька буде використовуватися. Рекомендується:

  • Або не вказувати її в самій функції, а вибирати в налаштуваннях сайту.
  • Або не вибирати її в налаштуваннях сайту, а вказувати в функції як додатковий заголовок.

Наприклад, якщо при надсиланні листа в заголовку вказати поштову скриньку з доменом google.com, лист буде відхилено через налаштування SPF-запису домену google.com. Тому в якості відправника слід вказувати тільки ваш домен або існуючу поштову скриньку.

Функція PHP mail має певні параметри для вказання даних одержувача, відправника, листа тощо:

mail("одержувач", "тема листа", "тіло листа", "додаткові заголовки", "додаткові параметри");

Основні параметри:

  • одержувач — має відповідати RFC 2822, не може містити сумарно більше 60 одержувачів у заголовках “To”, “Cc”, “Bcc”:
    • admin@example.com — один одержувач.
    • admin@example.com, user@example.com — кілька одержувачів.
    • Ім'я <admin@example.com> — ім'я та адреса одержувача, можна вказувати декількох одержувачів через кому.
  • тема листа — має відповідати RFC 2047.
  • тіло листа — вміст листа:
    • Має складатися з рядків довжиною не більше 70 символів. Для розділення тексту по рядках можна використовувати функцію PHP wordwrap:
      wordwrap($message, 70, "\r\n")
    • Рядки повинні розділятися CRLF (\r\n).
  • додаткові заголовки (необов'язковий) — рядок із заголовками, розділеними CRLF (\r\n), або масив рядків із заголовками:
    • From — відправник листа. Буде викликати помилку, якщо в налаштуваннях сайту вибрана поштова скринька.
    • Reply-To — адреса для отримання відповідей на лист. Рекомендується використовувати замість From.
    • Content-Type — MIME-заголовок з типом даних у повідомленні. Можна використовувати для вказання кодування листа:
      'Content-type: text/html; charset="utf-8"'
    • Cc и Bcc — надсилання копії повідомлення. Cc — копіює повідомлення адресату, який бачитиме свою адресу в заголовку To (кожен одержувач думатиме, що лист був адресований саме йому). Bcc — працює аналогічно, але без зміни заголовка To. ⚠️ Сумарно в заголовках To, Cc, Bcc має бути не більше 60 одержувачів.
  • додаткові параметри (необов'язковий) — параметри та ключі для використання sendmail:
    • -Fname — ключ з ім'ям відправника (не розділяються пробілом).
    • -fmail@example.com — ключ із поштовою скринькою відправника (не розділяються пробілом). Буде викликати помилку, якщо в налаштуваннях сайту вибрана поштова скринька.

Параметри функції потрібно вказувати в подвійних " або одинарних ' лапках.

Зміст