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 — ключ с почтовым ящиком отправителя (не разделяются пробелом). Будет вызывать ошибку, если в настройках сайта выбран почтовый ящик.

Параметры функции нужно указывать в двойных " или одинарных ' кавычках.

Содержание