Отправка почтовых сообщений через SMTP (phpMailer) для 1С-Битрикс "Управление сайтом".
С помощью Composer
-
Добавьте в ваш composer.json в раздел
require:"require": { "marvin255/bxmailer": "~1.0" }
-
Если требуется автоматическое обновление модуля через composer, то добавьте в раздел
scripts:"scripts": { "post-install-cmd": [ "\\marvin255\\bxmailer\\installer\\Composer::injectModule" ], "post-update-cmd": [ "\\marvin255\\bxmailer\\installer\\Composer::injectModule" ] }
-
Выполните в консоли внутри вашего проекта:
composer update -
Если пункт 2 не выполнен, то скопируйте папку
vendor/marvin255/bxmailer/marvin255.bxmailerв папкуlocal/modulesвашего проекта. А папкуvendor/phpmailer/phpmailerв папкуlocal/modules/marvin255.bxmailer/phpmailer. -
Установите модуль в административном разделе 1С-Битрикс "Управление сайтом".
-
Добавьте строку
\Bitrix\Main\Loader::includeModule('marvin255.bxmailer');вinit.phpвашего сайта.
Обычная
- Скачайте архив с репозиторием.
- Скопируйте папку
marvin255.bxmailerв папкуlocal/modulesвашего проекта. А папкуvendor/phpmailer/phpmailerв папкуlocal/modules/marvin255.bxmailer/phpmailer. - Установите модуль в административном разделе 1С-Битрикс "Управление сайтом".
- Добавьте строку
\Bitrix\Main\Loader::includeModule('marvin255.bxmailer');вinit.phpвашего сайта.
Smtp настраивается через настройки модуля в административной части. Там же можно протестировать отправку сообщений без необходимости подмены стандартной отправки. Подмена стандартной отправки Битрикса происходит только после подключения модуля с помощью \Bitrix\Main\Loader::includeModule('marvin255.bxmailer');. Если требуется подключить модуль без подмены стандартной отправки, то можно использовать константу:
define('MARVIN255_BXMAILER_NO_INJECT', true);
if (!\Bitrix\Main\Loader::includeModule('marvin255.bxmailer')) {
throw new Exception("Can't find marvin255.bxmailer module");
}В основе модуля лежит библиотека phpMailer. Соответственно отправка сообщений осуществляется с помощью phpMailer. Для того, чтобы заменить phpMailer на любой другой транспорт можно использовать событие:
use Bitrix\Main\EventManager;
use Bitrix\Main\Event;
EventManager::getInstance()->addEventHandler('marvin255.bxmailer', 'createHandler', 'createHandlerHandler');
function createHandlerHandler(Event $event)
{
$event->getParameter('mailer')->setHandler(new MyAwesomeHandler);
}Для того, чтобы все заработало, класс MyAwesomeHandler должен реализовывать интерфейс \marvin255\bxmailer\HandlerInterface.
Данные письма для транспорта передаются через объект сообщения, который тоже можно заменить с помощью события. Вместе с событием так же передается объект оригинального сообщения, а также все исходные параметры письма.
use Bitrix\Main\EventManager;
use Bitrix\Main\Event;
EventManager::getInstance()->addEventHandler('marvin255.bxmailer', 'createMessage', 'createMessageHandler');
function createMessageHandler(Event $event)
{
//$event->getParameter('messageContainer');
//$event->getParameter('to');
//$event->getParameter('subject');
//$event->getParameter('message');
//$event->getParameter('additional_headers');
//$event->getParameter('additional_parameters');
$event->setParameter('messageContainer', new MyAwesomeMessage);
}Для того, чтобы все заработало, класс MyAwesomeMessage должен реализовывать интерфейс \marvin255\bxmailer\MessageInterface.
Модуль перехватывает все исключения, чтобы не прерывать процесс инициализации сайта. Тем не менее, все исключения будут записаны в журнал ошибок.
Модуль логирует два типа ошибок:
- bxmailer_initialize_error - ошибки при инициализации модуля,
- bxmailer_send_error - ошибки при отправке сообщения.
Если требуется прервать работу модуля во время одного из событий, то следует выбросить исключение, унаследованное от \marvin255\bxmailer\Exception.
Внимание ошибки внутри событий, которые невозможно перехватить обработаны не будут.
В основе модуля лежит библиотека phpMailer. Автор модуля выражает огромную признательность сообществу phpMailer.
