Блог Андрея

 
 

Простой и надёжный PHP mailer использующий нативную функцию mail()

English version

Что это

Установка

Использование на продакшене

Использование на localhost Linux Ubuntu и аккаунтом Gmail

Что это

Это надежный и удобный класс для отправки электронной почты с поддержкой вложений с помощью функции PHP mail().

Я использую этот класс PHP последние десять лет и вижу, что он более надежен, чем инструменты электронной почты Swift_Mailer и Symfony Mailer.

Это звучит нескромно, но я напишу почему я так считаю.

В ноябре 2019 года я создал проект Symfony 3.4, он использует службу gmail на моем локальном хосте и почтовый ящик хостинг-провайдера на продакшене.

03 января 2020 года я обнаружил, что внезапно письма перестали отправляться с моего локального хоста (я использую учетную запись gmail и ssmtp). В логах Symfony 3.4 ошибок не было.

Я не редактировал свои скрипты Symfony.

Я попытался отправить письмо из проекта Symfony 5.0.2, но получил ошибку «Exception occurred while flushing email queue: Connection could not be established with host smtp.gmail.com :stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed».

Тогда я попытался отправить электронную почту, используя мой класс SimpleMail - и это было успешно.

Я много использовал этот скрипт раньше, на разных хостингах php. Это действительно работает (например, один из первых моих коммитов с этим классом здесь).

Поэтому я публикую этот класс PHP, я надеюсь, что он вам пригодится.

С Новым годом и Рождеством.

Установка

composer require landlib/simplemail

или

git clone https://github.com/lamzin-andrey/simplemail

Использование на продакшене

Настройте почтовый ящик в ISP Manager на хостинг-провайдере

Создайте почтовый ящик с помощью интерфейса ISP Manager.

Убедитесь, что вы можете отправить письмо с него, используя RoundCude или другой интерфейс.

Пример кода

use Landlib\SimpleMail;

//Простой email
$sender = 'yoursendmailbox@yoursite.com';
$recipient = 'yourothermailbox@gmail.com';
$mailer = new SimpleMail();
$mailer->setSubject('It test package landlib/simplemail');
$mailer->setFrom($sender, 'Your name');
$mailer->setTo($recipient);
$mailer->setBody('Hello, my friend', 'text/html', 'UTF-8');
$r = $mailer->send();
var_dump($r);

//Письмо с вложением
$mailer->setSubject('It test package landlib/simplemail - mail with inline attachment');
$mailer->setTextWithImages('Hello, my friend, {smile}!' . "\nI am a very satisfied person!", ['{smile}' => __DIR__ . '/smile.png']);
$r = $mailer->send();
var_dump($r);

Использование на localhost Linux Ubuntu и аккаунтом Gmail

Это для пользователей Linux Ubuntu Desktop.

Создать учетную запись Gmail и разрешить доступ для небезопасных приложений

На 03 01 2020 настроить доступ возможно по ссылке ссылке.

Если ссылка не работает, настройте ssmtp (см. Настройка ssmtp) и попробуйте запустить пример сценария app.php из папки example.

php app.php

Вы можете увидеть текст похожий на этот:

ssmtp: Authorization failed (535 5.7.8  https://support.google.com/mail/?p=BadCredentials h7sm24406885lfj.29 - gsmtp)
/opt/lampp/htdocs/mh.loc/www/q/q/simplemail/example/app.php:31:
bool(false)

Переходите по ссылке из сообщения и смотрите страницу поддержки - она содержит ссылку на страницу настроек, где вы можете разрешить доступ небезопасных приложений.

Установить и настроить сервер ssmtp

Это для пользователей Linux Ubuntu Desktop.

sudo apt-get install ssmtp

Например ваш адрес `testshop@gmail.com`.

Откройте файл /etc/ssmtp/revaliases

sudo gedit /etc/ssmtp/revaliases

Добавьте строку

root:testshop@gmail.com:smtp.gmail.com:587

Откройте файл /etc/ssmtp/ssmtp.conf

sudo gedit /etc/ssmtp/ssmtp.conf

Замените содержимое

root=testshop@gmail.com
mailhub=smtp.gmail.com:587
hostname=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=testshop@gmail.com
AuthPass=***** #здесь должен быть ваш пароль, кавычки не нужны
FromLineOverride=YES

Откройте ваш php.ini (Я использую XAMPP с утилитой FastXAMPP, мой php.ini находится /opt/lampp/etc/php.ini)

и добавьте или отредактируйте строку

sendmail_path = /usr/sbin/ssmtp -t

Рестартуйте apache (Я использую XAMPP, поэтому запускаю sudo /opt/lampp/lampp restart)

Запустите пример скрипта app.php (смотрите раздел Создать учетную запись Gmail и разрешить доступ для небезопасных приложений).