Отправка писем по SMTP через Gmail

Для отправки писем по SMTP из PHP можно использовать довольно популярный php-класс, размещенный на GitHub: PHPMailer.

Рекомендуемый способ его инсталляции - через Composer (должен быть загружен или установлен на сервере). Для тестирования скрипта нужно зайти по SSH в пустой, доступный из web каталог и выполнить:

$ composer require phpmailer/phpmailer

После выполнения команды в каталоге будет создана директория vendor, в которую будут загружены файлы класса PHPMailer и автозагрузчик Composer. Теперь в той же директории, из которой запускался Composer создается тестовый скрипт:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {
    //Server settings
    $mail->setLanguage('ru', 'vendor/phpmailer/phpmailer/language/'); // Перевод на русский язык
   
    //Enable SMTP debugging
    // 0 = off (for production use)
    // 1 = client messages
    // 2 = client and server messages
    $mail->SMTPDebug = 1;                                 // Enable verbose debug output

    $mail->isSMTP();                                      // Set mailer to use SMTP
   
    $mail->SMTPAuth = true;                               // Enable SMTP authentication

    //$mail->SMTPSecure = 'ssl';                          // secure transfer enabled REQUIRED for Gmail
    //$mail->Port = 465;                                  // TCP port to connect to
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to
   
    $mail->Host = 'smtp.gmail.com';                       // Specify main and backup SMTP servers
    $mail->Username = 'USERNAME@gmail.com';               // SMTP username
    $mail->Password = 'PASSWORD';                         // SMTP password

    //Recipients
    $mail->setFrom('USERNAME@gmail.com', 'USERNAME');
    $mail->addAddress('SENDER@example.com');              // Name is optional

    //Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Test mail to user';
    $mail->Body    = 'This is the very simple 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.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
}

Еще один пример тестового скрипта: gmail.phps.

Если после запуска скрипта отображается такая ошибка: SMTP Error: Could not connect to SMTP host или SMTP ERROR: Failed to connect to server: Network is unreachable, то следует проверить открыт ли SMTP порт в firewall и работоспособность DNS-сервера. Дополнительные сведения по ошибкам находятся на этой странице: github.com/PHPMailer/PHPMailer/wiki/Troubleshooting.

Настройка аккаунта Google для отправки через SMTP

Чтобы Google разрешил отправку писем через SMTP нужно произвести настройку учетной записи, иначе в логе PHPMailer может появится сообщение об ошибке: "SMTP ERROR: Password command failed: 534-5.7.14 Please log in via your web browser and then try again" (свойство $mail->SMTPDebug должно быть установлено в 1 или 2).

  • Включить доступ для менее безопасных устройств (именно такими Гугл считает сторонние SMTP сервера) по ссылке: myaccount.google.com. Также письмо со ссылкой на изменение этой настройки придет после первого безрезультатного подключения.
  • Просмотреть недавно используемые устройства: security.google.com.
  • Также может помочь эта ссылка: accounts.google.com.

Следует учитывать, что Google разрешает отправлять через свои почтовые аккаунты Gmail не более 99 писем в сутки или до 2000 (500 - пробный аккаунт), с использованием платной версии почтового приложения G Suite. При превышении ограничения на отправку писем по SMTP пользователь теряет возможность отправлять новые письма на 24 часа, но доступ к своему аккаунту остается. Поскольку правила могут измениться в будущем, то посмотреть ограничения можно на support.google.com.

Google будет автоматически изменять поле "От" любого сообщения, отправленного через SMTP на адрес электронной почты, записанный в настройках аккаунта. Чтобы изменить адрес "от" в настройках аккаунта нужно перейти на вкладку "Аккаунты и импорт" и нажать на "Добавить другой адрес электронной почты", после чего назначить его используемым по умолчанию.

Опубликовано: 2017/11/30
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/php.php?txt=717" target="_blank">Отправка писем по SMTP через Gmail из PHP</a>
24
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.