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 или локальный хост, а также настройки отладки.