Функция отправки писем mail() в PHP

PHP

Существует два основных способа отправки писем с помощью PHP: встроенная почтовая функция и внешние почтовые пакеты.

Встроенная почтовая функция PHP () очень проста, но предоставляет ограниченную функциональность для отправки электронных писем. Вы не сможете добавлять вложения в свою электронную почту. Создание красивого HTML-шаблона со встроенными изображениями также будет сложной задачей.

Другая сторона почтовой функции PHP () заключается в том, что письмо отправляется с вашего веб-сервера, что может вызвать проблемы с доставкой из-за проблем безопасности, таких как подозрение в спаме и занесении в черный список.

Лучший способ преодолеть эту проблему-отправлять сообщения через SMTP-сервер. Однако эта функциональность также ограничена. PHP mail() обычно не позволяет использовать внешний SMTP-сервер и не поддерживает SMTP-аутентификацию.

Вот что вы можете сделать со встроенной почтовой функцией PHP():

  • создавайте простые HTML/текстовые сообщения без вложений и изображений
  • отправка писем через localhost и Xmapp
  • создать несколько получателей с параметром “$to”.

Он подходит для простых, в основном текстовых уведомлений в вашей локальной среде. Если вам нужно общаться с пользователями вашего приложения, лучше установить внешний пакет почтовой программы.

Если вы все еще привержены встроенной в PHP почтовой функции и готовы принять вызов, давайте взглянем на базовый код и его основные параметры.

Синтаксис и параметры

Синтаксис почты PHP довольно прост:

<?РНР
mail($to_email_address,$subject,$message,[$headers],[$parameters]);
?>PHP

Он использует следующие параметры:

  • “$to” = получатель(и) вашего сообщения. Формат адреса электронной почты может быть user@example.com или Пользователь <user@example.com>. В общем, он должен соответствовать RFC 2822.
  • “$subject” = тема вашего сообщения
  • “$message” = тело вашего сообщения. Строки должны быть разделены символом CRLF (\r\n). Каждая строка не должна превышать 70 символов.
  • “[$headers]” = дополнительные получатели вашего сообщения, которые могут быть включены в CC или BCC.

Обратите внимание, что заголовки необязательны, за исключением заголовка “from”: он должен быть указан, иначе вы получите сообщение об ошибке типа Warning: mail(): “sendmail_from” не задан в php.ini или пользовательский заголовок “from:” отсутствует.

Вы можете использовать дополнительные заголовки, чтобы изменить адрес почты “От” и установить адрес “Ответить”. Для получения более подробной информации и дополнительных параметров обратитесь к документации PHP.

Отправка HTML-почты с помощью функции PHP mail()

Текст сообщения может быть написан в формате HTML. Однако, как уже упоминалось выше, это должно быть просто. В почтовой функции PHP () HTML-часть будет выглядеть следующим образом:

$message = ‘
<html>
<head>
<title>Комментарий по запросу</title>
</head>
<body>
<p>Вот несколько случаев, требующих ваш комментарий:</p>
<table>
<tr>
<th>Case title</th><th>Category</th><th>Status</th><th>Due date</th>
</tr>
<tr>
<td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td>
</tr>
<tr>
<td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td>
</tr>
</table>
</body>
</html>
‘;

Важно помнить, что для отправки HTML-почты необходимо задать заголовок Content-type:

$headers[] = ‘MIME-Version: 1.0’;
$headers[] = ‘Content-type: text/html; charset=iso-8859-1’;

Простой протокол передачи данных (SMTP)

Где я могу указать настройки SMTP? Это хороший вопрос. Перейдите в папку установки PHP и настройте их в файле “php.ini”.Стоит отметить, что это будет работать только для localhost или Xmapp,потому что, как уже упоминалось ранее, почтовая функция PHP не поддерживает SMTP-аутентификацию и не позволяет отправлять сообщения через внешние серверы.

Есть и другие, довольно бессистемные варианты, но рекомендуется использовать внешние почтовые пакеты PHP для отправки электронной почты через внешний SMTP-сервер.

Отправка нескольких электронных писем

Чтобы отправить сообщение нескольким получателям, укажите их адреса электронной почты в параметре “$to”=, разделив их запятой(ыми). Это единственный подходящий метод с собственной функцией mail (). Если вам нужно отправить большой объем сообщений в цикле, попробуйте использовать внешний почтовый пакет. В официальной документации PHP рекомендуется использовать PEAR::Mail.

Почтовые пакеты PHP

Как мы уже упоминали, нативная функция PHP mail() имеет ограниченную функциональность, когда дело доходит до массовой отправки. Например, он не предназначен для создания привлекательных шаблонов электронной почты, которые могут увеличить вашу следующую кампанию или отправить большой объем электронных писем.

Но поскольку PHP по-прежнему является одним из самых популярных языков программирования, он не испытывает недостатка в ресурсах для отправки массовых электронных писем. Вот несколько плагинов, которые настоятельно рекомендуют пользователи языка PHP.

PearMail

PearMail-это класс, который предоставляет несколько интерфейсов для отправки электронных писем (что указано в их документации).

Функционал pearmail:

  • создание сложных HTML/текстовых сообщений с вложениями и встроенными изображениями (с помощью класса Mail_Mime)
  • отправка электронных писем с помощью встроенной функции mail() PHP, программы sendmail или SMTP-сервера
  • отправляйте несколько писем из очереди (с классом Mail_Queue).

Документация Pear выглядит немного сложной, но она все еще информативна, и вы можете найти несколько учебных пособий. Чтобы иметь возможность сравнить несколько почтовых пакетов, давайте рассмотрим код для отправки стандартного электронного письма с подтверждением бронирования. Он будет содержать HTML и текстовые части, одно вложение и будет отправлен через аутентифицированный SMTP-сервер.

Для экспериментов с электронной почтой мы будем использовать Mailtrap, поддельный SMTP-сервер. Он имитирует реальный SMTP-сервер и ловит вашу тестовую электронную почту в виртуальных почтовых ящиках. Таким образом, ваши образцы электронной почты никогда не попадут в почтовые ящики реальных клиентов.

require_once’./vendor/autoload.php’;
$from = ‘Ваш Отель<подтверждение@inbox.ru>’;
$to= ‘Я<мой имэил @gmail.com>’;
$subject= ‘Спасибо что выбрали наш отель!’;

$headers = [‘От’ =>$from,’Кому’ =>$to, ‘Объект’ =>$subject];

// включите текст и HTML версию
$text= ‘ Привет, мы рады подтвердить ваш заказ. Пожалуйста, проверьте документ в приложении.’;
$html= ‘Привет, мы рады <br>подтвердить ваш заказ.</br>Пожалуйста, проверьте документ в приложении.’;

//добавьте вложение
$file= ‘подтверждение брони отеля.txt’;

$mime = newMail_mime();
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file, ‘текст’);

$body = $mime->get();
$headers = $mime->headers($headers);

$host = ‘smtp.mailtrap.io’;
$username = ‘login123’; // сгенерировано сервисом
$password = ‘parol123’; // сгенерировано сервисом
$port = ‘2332’;

$smtp= Mail::factory(‘smtp’, [
‘host’ =>$host,
‘auth’ =>true,
‘username’ =>$username,

‘пароль’ =>$password,
‘порт’ =>$port
]);

$mail = $smtp->send($to, $headers, $body);

if(PEAR::isError($mail)) {
echo(‘<p>’ . $mail->getMessage() . ‘</p>’);
} else {
echo(‘<p>Сообщение успешно отправлено!</p>’);
}

Оцените статью
Образовательный портал WELCOME4U.RU
Добавить комментарий

Adblock
detector