2.8.19. Функция PHP mail
Внимание!
Данная функция при неверных настройках и использовании может некорректно доставлять письма на целевой почтовый ящик — отправленные письма могут попадать в спам или отклоняться почтовым сервером получателя. Рекомендуется использовать корректные настройки или отправлять письма по SMTP.
Функция mail позволяет осуществлять отправку писем без SMTP-авторизации в почтовом ящике. Она полезна для быстрой настройки отправки писем, но при этом без определённых настроек может отправлять письма, которые с высокими шансами будут помещены в спам или отклонены. Причина тому — отсутствие корректного или указание неправильного заголовка FROM
при отправке, а также невозможность использования DKIM.
Указывая заголовок FROM
, важно учитывать, какой именно почтовый ящик будет использоваться. Рекомендуется:
- Либо не указывать его в самой функции, а устанавливать корректный почтовый ящик в настройках сайта.
- Либо не устанавливать его в настройках сайта, а указывать в функции дополнительным заголовком.
К примеру, при отправке писем с указанием заголовка, в котором будет использоваться домен mail.ru, письмо будет отклонено по причине наличия SPF-записи у домена mail.ru, поэтому в качестве отправителя следует указывать только ваш домен или же существующий почтовый ящик.
Описание функции
Функция mail имеет определённые параметры для указания данных получателя, отправителя, письма и прочего. Пример использования функции:
mail("получатель", "тема письма", "тело письма", "дополнительные заголовки", "дополнительные параметры");
Все указанные параметры функции нужно указывать в двойных "
или одинарных '
кавычках. Пример использования функции предоставлен в тестовом скрипте. Параметры должны соответствовать:
получатель
— параметр должен соответствовать стандарту, не может содержать более 60 получателей, с учетом указанных в заголовкеto
,Cc
,Bcc
, и может быть указан как:admin@example.com
— один получатель.admin@example.com, user@example.com
— несколько получателей, разделенных запятыми.Имя <admin@example.com>
— имя получателя и почтового ящика. Дополнительно можно указать также несколько получателей, разделенных запятыми.
тема письма
— тема, которая будет указана в письме, должна соответствовать стандарту.тело письма
— текст, который будет указан в самом письме. Для указания корректного тела нужно учитывать:- Тело письма должно быть разделено на строки, если оно превышает 70 символов. Строка не может быть больше 70 символов. Разделение текста по строкам удобно реализовывать функцией wordwrap. К примеру, если в переменной
$message
содержится текст письма, то можно её использовать так: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
(получатель), но множество почтовых сервисов может использовать его для разделения получателей, дабы не отображать им список, кому было адресовано письмо. Данный заголовок для каждого получателя подставляет самого получателя в заголовокTo
, тем самым каждый получатель будет думать, что письмо было адресовано конкретно ему.Bcc
— копирует сообщение адресату и выполняет ту же функцию, что иCc
за исключением того, что заголовокTo
(получатель) не будет изменён и пользователю, которому адресовано письмо, не будет отображен его почтовый ящик в списке получателей письма. Данный заголовок опасен в применении и может приводить к проблемам доставки или понимания причин доставки письма указанному в нём получателю. Важно! Нельзя указывать более 60 получателей с учётом указанных в заголовкеTo
,Cc
,Bcc
.
дополнительные параметры
(необязательный параметр) — параметры и ключи для использованияsendmail
. Часто используемые ключи:-Fuser
— ключ с именем отправителя (не разделяются пробелом).-fuser@example.com
— ключ с почтовым ящиком отправителя (не разделяются пробелом). Параметр будет создавать ошибку при использовании определённого почтового ящика в настройках сайта.