Отправка почтовых сообщений через 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.