PHPMailer в PHP
Класс PHPMailer является идеальным выбором, чтобы добавить службы email в ваше PHP-приложение. Поддерживаются PHP-фреймворки всех типов (хотя Laravel или Symfony основаны на библиотеке SwiftMailer, но по-прежнему можно использовать и PHPMailer). С помощью этого сложного инструмента создается электронное письмо в формате HTML с вложениями, которое затем может быть отправлено через SMTP или веб-сервер в вашей локальной сети большому количеству получателей в режиме реального времени. В конце этой статьи вы сможете отправить письмо, используя библиотеку php.
Установка
Вы можете отправлять электронные письма, используя mail(), Sendmail или Qmail, или вы можете отправлять их напрямую через SMTP-серверы.
Дополнительные расширенные функции включают в себя:
- SSL/SMTP-аутентификация
- Вложения в fs, string и бинарные
- Клиентам, которые не поддерживают электронную почту в формате HTML, можно отправить электронное письмо в виде обычного текста.
- Активное сообщество разработчиков поддерживает его безопасность и актуальность.
Установка PHPMailer
Вы должны установить PHPMailer через Composer, управление зависимостями для PHP, начиная с версии 6.0, выпущенной в августе 2017 года. Этот метод предложен разработчиками PHPMailer на Github.
В терминале введите следующий код для установки библиотеки:
composer require phpmailer/phpmailer
PHPMailer можно добавить вручную, если вы, например, не хотите устанавливать Composer в тестовой среде. Файлы исходного кода PHPMailer можно скачать здесь . После загрузки перенесите папку PHPMailer в один из каталогов пути включения, указанных в настройках PHP, а затем вручную загрузите каждый файл класса:
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'path_to_PHPMailer/src/Exception.php'; require 'path_to_PHPMailer/src/PHPMailer.php'; require 'path_to_PHPMailer/src/SMTP.php';
Подробную информацию о том, как установить пакет без композитора, см. в документации PHPMailer на Github.
PHPMailer для отправки писем с локального сервера
Наиболее вероятный сценарий заключается в том, что вы будете использовать HTML для создания сообщения электронной почты. В результате вы будете использовать методы и атрибуты HTML для доставки сообщений получателям.
Включите autoload.php
файл, созданный Composer, если вы использовали Composer для установки:
require 'path/to/composer/vendor/autoload.php';
Вот как использовать PHPMailer, если вы установили его вручную:
require 'path_to_PHPMailer/src/PHPMailer.php'; require 'path_to_PHPMailer/src/SMTP.php'; require 'path_to_PHPMailer/src/Exception.php';
Затем включите класс PHPMailer:
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception;
Создание нового объекта PHPMailer — это следующий этап процесса:
$mail = new PHPMailer();
На следующем шаге мы предоставим заголовки:
$mail->setFrom('noreply@example.com', 'Admin');//Add a sender $mail->addAddress('joe@example.net', 'User');//Add a recipient $mail->addReplyTo('info@example.com', 'Information');//Add an address that the mail reply should be sent $mail->addCC('cc@example.com'); //Add a more recipient $mail->addBCC('bcc@example.com');//Add a more recipient
Если вам нужно добавить много адресов, создайте новый код для каждого из них:
$mail->AddBCC('bcc2@example.com', 'mick'); $mail->AddBCC('bcc3@example.com', 'doe');
Файл можно прикрепить, указав путь к нему. Также вы можете указать имя файла, хотя это и не обязательно: скрипт будет использовать реальное имя файла:
$mail->addAttachment('path_to/file.csv', 'file.csv');
В другом случае, чтобы добавить изображение, вы используете вложения CID для встраивания изображения сюда:
$mail->addEmbeddedImage('path_to/image_file.jpg', 'image');
и в теле сообщения добавить
$mail->Body = '<img src="cid:image">';
Добавьте тему, укажите, что она должна быть доставлена с помощью sendmail, и укажите, что сообщение должно содержать HTML.
$mail->Subject = 'Test Email Using PHPMailer'; $mail->IsSendmail();sets to send mail using Sendmail. $mail->isHTML(true); //Set email format to HTML
Теперь вы можете ввести тело письма:
$mail->Body = "<H1>Mail body in HTML</H1><p>Email testing</p>"; $mail->AltBody = "This is the plain text version of the email content";
Наконец, определите функции отправки электронной почты следующим образом:
try { $mail->send(); echo "Message has been sent successfully"; } catch (Exception $e) { echo "Mailer Error: " . $mail->ErrorInfo; }
Наконец, давайте объединим весь созданный вами код для отправки электронного письма.
<?php require 'path/to/composer/vendor/autoload.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; $mail = new PHPMailer(); $mail->setFrom('noreply@example.com', 'Admin');//Add a sender $mail->addAddress('joe@example.net', 'User');//Add a recipient $mail->addReplyTo('info@example.com', 'Information');//Add an address that the mail reply should be sent $mail->addCC('cc@example.com'); //Add a more recipient $mail->addBCC('bcc@example.com');//Add a more recipient $mail->addAttachment('path_to/file.csv', 'file.csv'); $mail->addEmbeddedImage('path_to/image_file.jpg', 'image'); $mail->Subject = 'Test Email Using PHPMailer'; $mail->IsSendmail();sets to send mail using Sendmail. isHTML(true) sets the email's format to HTML. $mail->isHTML(true); //Set email format to HTML $mail->Body = "<H1>Mail body in HTML</H1><p>Email testing<img src="cid:image"></p>"; $mail->AltBody = "This is the plain text version of the email content"; try { $mail->send(); echo "Message has been sent successfully"; } catch (Exception $e) { echo "Mailer Error: " . $mail->ErrorInfo; }
Отправка писем с помощью SMTP-сервера
//Server settings $mail->SMTPDebug = 1;//Enable SMTP debugging //Send using SMTP $mail->isSMTP(); //Enable SMTP authentication $mail->SMTPAuth = true; //SMTP Host $mail->Host='smtp.example.com'; //SMTP username $mail->Username= 'user@example.com'; //SMTP password $mail->Password= 'secret'; //Enable implicit TLS encryption $mail->SMTPSecure= PHPMailer::ENCRYPTION_SMTPS; //TCP port to connect $mail->Port= 465; $mail->isHTML(true); //Set email format to HTML $mail->Body = "<H1>Mail body in HTML</H1><p>Email testing</p>"; $mail->AltBody = "This is the plain text version of the email content"; try { $mail->send(); echo "Message has been sent successfully"; } catch (Exception $e) { echo "Mailer Error: " . $mail->ErrorInfo; }
Теперь пройдемся по переменным
$mail->SMTPDebug
используется для включения отладки и отображения сообщений об ошибках.$mail->isSMTP()
используется для уведомления PHPMailer о необходимости использования SMTP для передачи сообщений.$mail->SMTPAuth
используется для установки аутентификации.$mail->Host
используется для определения хоста сервера$mail->Username
используется для определения имени пользователя для учетной записи узла smtp-сервера.$mail->Password
используется для определения пароля для учетной записи хоста smtp-сервера$mail->SMTPSecure
устанавливает тип шифрования.$mail->Port
используется для определения порта сервера, на который должно быть отправлено электронное письмо.
Заключение
Как разработчик PHP, мало шансов, что вы сможете избежать отправки электронных писем через скрипт. В некоторых случаях возможно использование сторонних сервисов, таких как mailtrap или mailchimp, но разработка собственной библиотеки отправки электронной почты может быть неосуществимой. В этом заключается ценность PHPMailer и его эквивалентов (таких как Zend Mail и Swift Mailer).
Здесь мы рассмотрели наиболее частое использование Phpmailer: доставку изображений и вложений в сообщениях электронной почты в формате HTML через SMTP или локальный хост, а также настройки отладки.