Этот материал описывает, как отправлять сообщения через 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
Метод Файлового Менеджера
Хотя метод командной строки предпочтителен, вы можете использовать этот метод, если ваш поставщик хостинга не предоставляет доступ к SSH или отсутствует значок Терминала.
ПРИМЕЧАНИЕ: Для этого метода необходимо размещение сценария в общедоступном месте сервера. Это может представлять собой риск безопасности и рекомендуется только в том случае, если файл защищен мерами, такими как функция Защиты Директории. Обычно этот метод используется на этапе тестирования. После завершения тестирования рекомендуется переместить сценарий почтовика в безопасное место и вызывать его из вашего приложения PHP. Если у вас есть сомнения относительно того, как вызвать сценарий из вашего приложения PHP, рекомендуем обратиться за помощью к разработчику PHP.
- Войдите в аккаунт cPanel от имени вашего пользователя.
- Настройте Защиту Директории для вашей папки “public_html“.
- В разделе “Файлы” найдите значок “Файловый Менеджер“.
- Нажмите на директорию “public_html“, чтобы открыть её.
- Скачайте библиотеку PHPMailer как zip-файл: PHPMailer на Github
- Загрузите zip-файл в Файловый Менеджер с помощью кнопки “Загрузить” в горизонтальном меню вверху.
- Используйте кнопку “Извлечь” в горизонтальном меню Файлового Менеджера, чтобы извлечь библиотеку PHPMailer.
- Создайте новый файл PHP с именем “test.php” в директории “public_html” с содержанием примерного сценария ниже.
- Обновите сценарий своими настройками.
- Протестируйте сценарий, посетив URL-адрес файла: https://domain.tld/test.php
Примерный сценарий
Этот сценарий настроен на создание подробного отладочного вывода по умолчанию. Сценарий требует изменений, чтобы работать в вашей конкретной среде. Вам нужно обновить следующее:
- Пути к 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}"; }