Использование библиотеки PHPMailer для отправки сообщений по протоколу SMTP

Последнее изменение: Tuesday November 21st, 2023

Этот материал описывает, как отправлять сообщения через SMTP, используя библиотеку PHPMailer.

Введение

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

Когда ваше приложение требует отправки электронных писем, у вас есть два основных выбора:

  1. Использовать функцию mail() в PHP
  2. Использовать библиотеку SMTP

Преимущество использования функции mail() в PHP заключается в ее крайней простоте и удобстве использования. Тем не менее есть несколько недостатков, связанных с использованием функции mail():

  1. Поставщики электронной почты, основанные на платформе Microsoft, категоризируют сообщения, созданные с использованием функции mail() в PHP, как спам, потому что они не распознают заголовки DKIM, созданные функцией mail() в PHP.
  2. Функция mail() работает синхронно, требуя от приложения ожидания завершения транзакции SMTP перед выполнением других задач.

При использовании библиотеки SMTP, такой как PHPMailer, вы не столкнетесь с такими же ограничениями, хотя это требует немного больше настроек.

Процедура

Цель этого руководства – упростить установку библиотеки PHPMailer, сделав ее быстрой и простой.

Метод командной строки (рекомендуется)

ПРИМЕЧАНИЕ: Пожалуйста, замените “cpanelusername” именем пользователя вашего cPanel, а “domain.tld” – вашим доменным именем.

  1. Войдите через Терминал или SSH от имени пользователя cPanel
  2. Перейдите в подкаталог, где должен находиться сценарий:
    Bash:
    $ mkdir /home/cpanelusername/PHPMailerTest$ cd /home/cpanelusername/PHPMailerTest
  3. Клонируйте библиотеку 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.
  4. Ознакомьтесь с документацией здесь: Документация PHPMailer на Github
  5. Создайте сценарий, скопировав предоставленный в этом руководстве примерный сценарий в следующий файл:
    /home/cpanelusername/PHPMailerTest/testScript.php
  6. Обновите сценарий своими настройками.
  7. Протестируйте сценарий с помощью следующей команды:
    $ php /home/cpanelusername/PHPMailerTest/testScript.php

Метод Файлового Менеджера

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

ПРИМЕЧАНИЕ: Для этого метода необходимо размещение сценария в общедоступном месте сервера. Это может представлять собой риск безопасности и рекомендуется только в том случае, если файл защищен мерами, такими как функция Защиты Директории. Обычно этот метод используется на этапе тестирования. После завершения тестирования рекомендуется переместить сценарий почтовика в безопасное место и вызывать его из вашего приложения PHP. Если у вас есть сомнения относительно того, как вызвать сценарий из вашего приложения PHP, рекомендуем обратиться за помощью к разработчику PHP.

  1. Войдите в аккаунт cPanel от имени вашего пользователя.
  2. Настройте Защиту Директории для вашей папки “public_html“.
  3. В разделе “Файлы” найдите значок “Файловый Менеджер“.
  4. Нажмите на директорию “public_html“, чтобы открыть её.
  5. Скачайте библиотеку PHPMailer как zip-файл: PHPMailer на Github
  6. Загрузите zip-файл в Файловый Менеджер с помощью кнопки “Загрузить” в горизонтальном меню вверху.
  7. Используйте кнопку “Извлечь” в горизонтальном меню Файлового Менеджера, чтобы извлечь библиотеку PHPMailer.
  8. Создайте новый файл PHP с именем “test.php” в директории “public_html” с содержанием примерного сценария ниже.
  9. Обновите сценарий своими настройками.
  10. Протестируйте сценарий, посетив URL-адрес файла: https://domain.tld/test.php

Примерный сценарий

Техническая поддержка не предоставляет помощи по реализации, отладке или обслуживанию сценария в этом руководстве. Если у вас возникли ошибки с вашим сценарием, обратитесь к нашей странице по отладке PHPMailer, если вы видите ошибку “SMTP Error: Could not authenticate.” для получения дополнительной помощи.
Предоставленный примерный сценарий является отличным отправным пунктом, предназначенным для беспроблемной работы с PHPMailer 6.1.2. В этом сценарии используются обязательные операторы для включения трех основных файлов PHP, которые необходимы для функционирования PHPMailer в самом базовом режиме.

Этот сценарий настроен на создание подробного отладочного вывода по умолчанию. Сценарий требует изменений, чтобы работать в вашей конкретной среде. Вам нужно обновить следующее:

  • Пути к 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 PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

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 = 'moc.e1728494535lpmax1728494535e@res1728494535u1728494535'; // Имя пользователя SMTP
 $mail->Password = 'secret'; // Пароль SMTP
 $mail->SMTPSecure = 'tls'; // Включить шифрование TLS, также принимается [ICODE]ssl[/ICODE]
 $mail->Port = 587; // TCP-порт для подключения

// Получатели
 $mail->setFrom('moc.e1728494535lpmax1728494535e@mor1728494535f1728494535', 'Mailer');
 $mail->addAddress('ten.e1728494535lpmax1728494535e@1tn1728494535eipic1728494535er1728494535', 'Joe User'); // Добавить получателя
 $mail->addAddress('moc.e1728494535lpmax1728494535e@2tn1728494535eipic1728494535er1728494535'); // Имя не обязательно
 $mail->addReplyTo('moc.e1728494535lpmax1728494535e@ofn1728494535i1728494535', 'Information');
 $mail->addCC('moc.e1728494535lpmax1728494535e@cc1728494535');
 $mail->addBCC('moc.e1728494535lpmax1728494535e@ccb1728494535');

// Вложения
 $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}";
}
Was this article helpful?
Просмотры: 563

10 лет с BeeHosting!
Отмечаем скидками до 70% на все услуги
+ бесплатная миграция сайта.

Facebook Instagram linkedin

Beehosting.pro website uses cookies

We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners who may combine it with other information that you’ve provided to them or that they’ve collected from your use of their services.

Меню