Настраиваем функцию mail в PHP
В этой статье пойдет разговор о том, как выполнить настройку своего Mail на PHP. Рассмотрим особенности использования Mail, что делать, если письма не отправляются, как выполняется отправка с вложением и какие бывают проблемы с кодировкой.
Какой бы интернет-проект на PHP вы не сделали, на нём должна быть форма обратной связи, что особенно актуально для проектов коммерческого направления. А значит, вам не обойтись без функции mail. Что же, давайте посмотрим, как использовать эту функцию для отправки сообщений.
Лирическое отступление
Прежде чем двигаться дальше, давайте немного вспомним теорию. Чтобы отправлять письма, нам потребуется почтовый сервер SMTP. Но это не проблема, т. к. он есть практически на всех современных платных хостингах. SMTP — сетевой протокол (protocol), используемый для передачи почты в сетях TCP/IP. Почтовые серверы и прочие агенты пересылки задействуют SMTP для получения и отправки сообщений.
Для приёма почты нам понадобится POP-сервер. Также следует понимать, что сам по себе PHP не отправляет сообщение, а лишь передаёт команды приложению sendmail — именно оно занимается отправкой, следовательно, его нужно иметь (если используете Денвер, то данное приложение уже встроено). Вдобавок ко всему, все сообщения почты помещаются в директорию под названием «tmp/!sendmail».
Как настроить mail?
Настройка выполняется в конфигурационном файле php.ini. В этом файле нужно прописать путь к лог-файлам, а также задать значения порта.
Общее описание функции:
Список основных параметров: 1. to — получатель (получатели) письма. Формат должен соответствовать » RFC 2822. Пример — [email protected]; 2. subject — тема отправляемого письма; 3. message — отправляемое сообщение. Строка отделяется символом CRLF (\r\n). Сами строки не д. б. длиннее семидесяти символов. 4. additional_headers — этот параметр является необязательным. Обозначает строку либо массив, которые вставляются в самый конец отправляемых заголовков. 5. additional_parameters — тоже необязателен. Используют для передачи дополнительных флагов в качестве аргументов командной строки для программы, которая сконфигурирована для отправки писем и указана директивой sendmail_path. К примеру, есть возможность установить отправителя при применении sendmail и с помощью опции -f.
Приведём пример:
<?php mail("[email protected]", "Заголовок", "Текст сообщения"); ?>
Если вы являетесь веб-мастером и используете Денвер, то информация, которая будет вами отправлена, сохранится на виртуальном диске Z в папке «tmp!sendmail».
Особенности использования
Работа функции mail в PHP зависит от ряда нюансов, включая вид операционной системы, выполненные настройки и параметры. Вот некоторые особенности: — во время отправки письма заголовок Form задаётся через необязательный параметр «additional_headers». Если его нет, нередко возникает ошибка при отправлении; — заголовки разделяйте символами перевода на новую строку и перевода каретки (\r\n); — следите, чтобы длина строки не превышала 70 знаков, для регулировки тоже используйте (\r\n).
Что делать, если функция не отправляет письма?
Даже если учесть всё вышеперечисленное, mail в PHP иногда не работает, причём на локальном сервере всё отправляется нормально. Одна из причин — некорректная настройка функции непосредственно на хостинге. Для решения проблемы рекомендуется обратиться к конфигурационному файлу php.ini и посмотреть на параметры функции «disable_functions». Дело в том, что нужная вам функция
Идём дальше. Мы можем проверить работоспособность, написав простой код и разместив его в корневом каталоге созданного веб-проекта (сайта):
<? print mail("[email protected]","header","text"); ?>
Если всё функционирует верно, на экране браузера мы увидим цифру один — «1». Её нам вернёт «print» после выполнения. В качестве кодировки рекомендуется использовать UTF-8.
Важный момент! Если вы в качестве локального сервера используете OpenServer, то письма будут сохраняться в папке C:\openserver\userdata\temp\email. Естественно, если вы его установили на локальный диск «С».
Отправка с вложением
Давайте посмотрим, как отсылать сообщения, включающие в себя прикреплённый файл. Воспользуемся для этого функцией
<? $file = "./files/test.txt"; // прописывается путь к тому файлу, который надо отправить $mailTo = "[email protected]"; // адрес отправителя $from = "[email protected]"; // от кого письмо (от чьего имени) $subject = "Test file"; // тема $message = "Текст с вложением"; // содержимое письма $r = sendMailAttachment($mailTo, $from, $subject, $message, $file); // отправка письма c вложением echo ($r)?Отправлено':'Ошибка. Письмо не отправлено!'; //$r = sendMailAttachment($mailTo, $from, $subject, $message); // отправка без вложения //echo ($r)?Отправлено':'Ошибка. Письмо не отправлено!'; ?>
Проблемы с кодировкой
Бывает, что после доставки сообщения поступают в виде вопросов «?» либо каких-то непонятных символов. Это свидетельствует о проблемах с кодировкой. Проблема может заключаться в заголовке From. Такие заголовки по стандарту должны быть в US-ASCII. Существуют 2 формы кодирования —BASE64 и Quoted-Printable. BASE64 более универсальна и может работать с UTF-8, поэтому лучше использовать ее. Пример:
Однако в данном варианте заголовки могут быть нечитаемы. Для решения данной проблемы следует написать заголовок так:
Также необходимо использовать исключительно кодировку UTF-8.
Как видите, работа функции mail в PHP совсем несложна. Да, мы рассмотрели лишь наиболее распространённые ошибки, возникающие при её реализации. Однако никто не мешает повысить свои навыки PHP-программирования на наших курсах.
Источники: https://www.php.net/manual/ru/function.mail.php; https://start-luck.ru/sozdanie-sayta/php-funkciya-mail.html.