floor12/yii2-module-mailing

Mailing module for yii2 projects.

0.1.13 2019-03-01 10:46 UTC

This package is auto-updated.

Last update: 2024-03-25 23:51:05 UTC


README

Build Status Latest Stable Version Latest Unstable Version Total Downloads License

Данный модуль разработан для отправки массовых рассылок (как пользователям приложения, так и по произвольным спискам). Он отслеживает открытые письма (при включенной загрузке изображений), а так же отслеживает открытые ссылки, при наличии их в рассылке.

Отправка рассылок возможна на:

  • произвольный список email адресов, введенных непосредственно при составлении рассылки;
  • по заранее составленным спискам (их можно составлять в интерфейсе админки модуля, но часто бывает удобно составлять их динамически самостоятельно);
  • извлекая адреса из одной или нескольких ActiveRecord моделей вашего приложения.

Установка

Ставим модуль

Выполняем команду

$ composer require floor12/yii2-module-mailing

иди добавляем в секцию "requred" файла composer.json

"floor12/yii2-module-mailing" : "*"

Выполняем миграцию для созданию необходимых таблиц

$ ./yii migrate --migrationPath=@vendor/floor12/yii2-module-mailing/src/migrations/

Если до этого не был установлен модуль floor12\files\Module, который присутствует тут в зависимостях, то создаем папку @app/storage c правами веб-сервера на запись, так же выполняем миграцию для модуля файлов:

$ ./yii migrate --migrationPath=@vendor/floor12/yii2-module-files/src/migrations/

Добавляем данный модуль в конфиг приложения (а так же модуль floor12/yii2-module-files, если он не был установлен в приложении прежде)

'modules' => [
        'mailing' => [
            'class' => 'floor12\mailing\Module',
            'editRole' => 'admin',
            'layout' => '@app/views/layouts/columns',
            'fromEmail' => 'no-reply@example.com',
            'fromName' => 'Служба рассылок сайта example.com',
            'htmlTemplate' => 'mailing-main',
            'domain' => 'https://aexample.com',
            'linkedModels' => [
                \common\models\User::class,
                \common\models\Clients::class,
            ]
        ],
        'files' => [
            'class' => 'floor12\files\Module',
        ],
    ],
    ...

Параметры:

  • editRole - роль пользователя, который имеет доступ к контроллерам админки модуля.

  • layout - алиас лейаута, которые необходимо использовать в админке модуля.

  • fromEmail - email адрес отправителя рассылок.

  • fromName - От имени кого отправляются рассылки.

  • htmlTemplate - название темплейта в проекте, которые используется для рассылок

  • domain - так как запуск очереди идет через консоль, а она ничего не знает о домене сайта, то прописываем домен приложения, для работы отслеживания открытых писем и переходов по ссылкам.

  • linkedModels - Массив классов ActiveRecord, данные из которых необходимо использовать для формирования адресов получателей. Данные классы должны имплементировать floor12\mailing\interfaces\MailingRecipientInterface.

  • unsubscribeRoute - путь к экшену отписки от рассылки (пользователь помечается как отписанный), обычно менять не стоит.

Запуск очереди

Для запуска очередь необходимо выполнить команду:

$./yii mailing/queue

Рекомендую добавить ее в крон с периодичностью минут в 15.

Использование

Админка модуля доступна по адресу https://example.com/mailing.

Раздел рассылок: Image Раздел списков: Image Раздел адресов: Image

При редактировании рассылки, если в конфиге модуля были указаны какие-либо классы в массиве linkedModels, то компоненты Select2 с выбором объектов этих классов будут сформированы автоматически. На изображениях показан пример с классом common\models\User.

Image

В примере на изображении класс User реализует floor12\mailing\interfaces\MailingRecipientInterface следующим образом, благодаря чему, в форме генерируется поле "пользователи".

class User extends MyActiveRecord implements IdentityInterface, MailingRecipientInterface
{

    public static function getMailingList(): array
    {
        return self::find()->select('fullname')->indexBy('id')->column();
    }

    public static function getMailingLabel(): string
    {
        return "Пользователи";
    }

    public function getMailingEmail(): string
    {
        return $this->email;
    }
    ...

Остальные подробности можно узнать из исходного кода.