Использование библиотеки PHPMailer для отправки сообщений по протоколу SMTP
Этот материал описывает, как отправлять сообщения через SMTP, используя библиотеку PHPMailer.
Введение
Внедрение библиотеки SMTP в ваше приложение требует опыта программирования на PHP. Если у вас есть сомнения относительно того, как интегрировать предоставленный в этом руководстве образец сценария в ваше приложение на PHP, рекомендуется обратиться за помощью к опытному и обученному разработчику PHP, который может выполнить эту задачу за вас. Когда ваше приложение требует отправки электронных писем, у вас есть два основных выбора:
- Использовать функцию
mail()
в PHP - Использовать библиотеку SMTP
Преимущество использования функции mail()
в PHP заключается в ее крайней простоте и удобстве использования. Тем не менее есть несколько недостатков, связанных с использованием функции mail()
:
- Поставщики электронной почты, основанные на платформе Microsoft, категоризируют сообщения, созданные с использованием функции
mail()
в PHP, как спам, потому что они не распознают заголовки DKIM, созданные функциейmail()
в PHP. - Функция
mail()
работает синхронно, требуя от приложения ожидания завершения транзакции SMTP перед выполнением других задач.
При использовании библиотеки SMTP, такой как PHPMailer, вы не столкнетесь с такими же ограничениями, хотя это требует немного больше настроек.
Процедура
Цель этого руководства — упростить установку библиотеки PHPMailer, сделав ее быстрой и простой.
Метод командной строки (рекомендуется)
ПРИМЕЧАНИЕ: Пожалуйста, замените «cpanelusername» именем пользователя вашего cPanel, а «domain.tld» — вашим доменным именем.
- Войдите через Терминал или SSH от имени пользователя cPanel
- Перейдите в подкаталог, где должен находиться сценарий:
Bash:
$ mkdir /home/cpanelusername/PHPMailerTest$ cd /home/cpanelusername/PHPMailerTest
- Клонируйте библиотеку PHPMailer с помощью команды
git clone
:$ git clone https://github.com/PHPMailer/PHPMailer Cloning into 'PHPMailer'... remote: Enumerating objects: 37, done. remote: Counting objects: 100% (37/37), done. remote: Compressing objects: 100% (26/26), done. remote: Total 6846 (delta 18), reused 25 (delta 11), pack-reused 6809 Receiving objects: 100% (6846/6846), 4.79 MiB | 6.68 MiB/s, done. Resolving deltas: 100% (4438/4438), done.
- Ознакомьтесь с документацией здесь: Документация PHPMailer на Github
- Создайте сценарий, скопировав предоставленный в этом руководстве примерный сценарий в следующий файл:
/home/cpanelusername/PHPMailerTest/testScript.php
- Обновите сценарий своими настройками.
- Протестируйте сценарий с помощью следующей команды:
$ php /home/cpanelusername/PHPMailerTest/testScript.php
Метод Файлового Менеджера
- Войдите в аккаунт cPanel от имени вашего пользователя.
- Настройте Защиту Директории для вашей папки «public_html«.
- В разделе «Файлы» найдите значок «Файловый Менеджер«.
- Нажмите на директорию «public_html«, чтобы открыть её.
- Скачайте библиотеку PHPMailer как zip-файл: PHPMailer на Github
- Загрузите zip-файл в Файловый Менеджер с помощью кнопки «Загрузить» в горизонтальном меню вверху.
- Используйте кнопку «Извлечь» в горизонтальном меню Файлового Менеджера, чтобы извлечь библиотеку PHPMailer.
- Создайте новый файл PHP с именем «test.php» в директории «public_html» с содержанием примерного сценария ниже.
- Обновите сценарий своими настройками.
Примерный сценарий
Этот сценарий настроен на создание подробного отладочного вывода по умолчанию. Сценарий требует изменений, чтобы работать в вашей конкретной среде. Вам нужно обновить следующее:
- Пути к PHP-файлам в обязательных операторах
$mail->Host
— Используйте имя хоста вашего сервера cPanel. В некоторых случаях можно использовать ваше доменное имя.$mail->Username
— Используйте адрес электронной почты действующего учетного записи на вашем сервере cPanel.$mail->Password
— Используйте пароль для действующей учетной записи электронной почты на вашем сервере cPanel.$mail->setFrom
— Используйте тот же адрес, что и в конфигурации Username.$mail->addAddress
— Установите адрес получателя.$mail->addReplyTo
— Установите тот же адрес, что и в конфигурации Username.$mail->addCC
— Удалите это или установите адрес для копии.$mail->addBCC
— Удалите это или установите адрес для скрытой копии.$mail->addAttachment
— Удалите это или обновите путь к файлу, который нужно прикрепить.$mail->Subject
— Обновите тему по вашему желанию.$mail->Body
— Обновите содержимое HTML по вашему желанию. Это не обязательно должно быть HTML, но может содержать HTML.$mail->AltBody
— Обновите это до простого текстового варианта вашего содержимого/сообщения.
<?php use PHPMailerPHPMailerPHPMailer; use PHPMailerPHPMailerException; require '/home/cpanelusername/PHPMailerTest/PHPMailer/src/Exception.php'; require '/home/cpanelusername/PHPMailerTest/PHPMailer/src/PHPMailer.php'; require '/home/cpanelusername/PHPMailerTest/PHPMailer/src/SMTP.php'; // Instantiation and passing [ICODE]true[/ICODE] enables exceptions $mail = new PHPMailer(true); try { //Server settings $mail->SMTPDebug = 2; // Включить подробный отладочный вывод $mail->isSMTP(); // Установить почтовик для использования SMTP $mail->Host = 'smtp1.example.com;smtp2.example.com'; // Указать основной и резервный SMTP-серверы $mail->SMTPAuth = true; // Включить аутентификацию SMTP $mail->Username = 'user@example.com'; // Имя пользователя SMTP $mail->Password = 'secret'; // Пароль SMTP $mail->SMTPSecure = 'tls'; // Включить шифрование TLS, также принимается [ICODE]ssl[/ICODE] $mail->Port = 587; // TCP-порт для подключения // Получатели $mail->setFrom('from@example.com', 'Mailer'); $mail->addAddress('recipient1@example.net', 'Joe User'); // Добавить получателя $mail->addAddress('recipient2@example.com'); // Имя не обязательно $mail->addReplyTo('info@example.com', 'Information'); $mail->addCC('cc@example.com'); $mail->addBCC('bcc@example.com'); // Вложения $mail->addAttachment('/home/cpanelusername/attachment.txt'); // Добавить вложения $mail->addAttachment('/home/cpanelusername/image.jpg', 'new.jpg'); // Необязательное имя // Содержание $mail->isHTML(true); // Установить формат электронной почты в HTML $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the HTML message body <b>in bold!</b>'; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; }