Phalcon

Отправка почты в Phalcon PHP

Phalcon Mailer Service - Сервис для отправки почты

Сервис для отправки почты для Phalcon используя Swift Mailer.

Код заимствован из Laravel 4 и адаптирован под Phalcon PHP.

Реализована возможность использования очередей для отложенной отправки почты через реализованный в Phalcon сервис очередей Beanstalk.

Работа с очередями в Phalcon docs.phalconphp.com/ru/latest/reference/queue.html

Важно! Версия PHP должна быть не ниже 5.4.

Установка через composer

Что такое composer

Для установки через composer необходимо добавить в файл composer.json в секцию require следующую строку:

"vanchelo/phalcon-mailer": "dev-master"

Должно получиться примерно так:

"require": {
    "vanchelo/phalcon-mailer": "dev-master"
}

После этого открываем терминал и запускаем команду composer update

Инициализация сервиса

Лучшим вариантом будет прописать этот код в вашем файле сервисов, обычно это app/config/services.php

/**
* Register Mailer Service
*/
$di['mailer'] = function() {
    $service = new MailerService();

    return $service->mailer();
};
Отправка письма

Пример для контроллера, но работать будет не только в контроллерах

$this->mailer->send('emails/hello_world', [
    'test' => 'test' // Переменные для передачи в шаблон
], function($message) {

    // По умолчанию адрес отправителя указывается в настройках
    $message->from('vanchelo@artdevue.com'); // Адрес отправителя. Эту строку можно удалить или закоментировать
    $message->to('for_user@domain.com'); // Адрес получателя
    $message->subject('Привет, Мир'); // Тема письма

    $message->attach('/absolute/path/to/attachment'); // Добавить вложение
});

где, emails/hello_world - шаблон письма расположенный в каталоге views, (app/views/emails/hello_world.[phtml|volt])

По умолчанию, если в контейнере зарегистрирован сервис view библиотека будет использовать его, соответственно можно использовать любой удобный доступный шаблонизатор (phtml, volt и т.д.)

Добавить вложение к письму

Прикрепить файл

/**
 * $pathToFile - путь к прикрепляемому файлу (вложению)
 * $as         - отображаемое имя в письме
 * $mime       - mime тип файла
 */
$message->attach($pathToFile, ['as' => $display, 'mime' => $mime]);

Более подробно можно почитать здесь laravel.com/docs/mail

Настройки

Настройки по умолчанию необходимо прописать в конфигурационном файле вашего приложения config/config.php

return new \Phalcon\Config([
    'application' => array(
        // Путь используемый для поиска шаблонов писем
        'viewsDir'  => __DIR__ . '/../app/views/',
        /* ... */
    ),

    'mail' => [
        'driver' => 'smtp', // mail, sendmail, smtp
        'host'   => 'smtp.email.com',
        'port'   => 587,
        'from'   => [
            'address' => 'no-reply@my-domain.com',
            'name'    => 'My Cool Company'
        ],
        'encryption' => 'tls',
        'username'   => 'no-reply@my-domain.com',
        'password'   => 'some-strong-password',
        'sendmail'   => '/usr/sbin/sendmail -bs',
    ],
]);

Если будет необходимость, настройки почты можно вынести в отдельный конфигурационный файл.

Код библиотеки на GitHub phalcon-mailer

Очереди (отложенная отправка почты)

Для отложенной отправки почты у вас должен быть зарегистрирован сервис queue в контейнере, например:

use Phalcon\Queue\Beanstalk;

$this->di['queue'] = function () {
    $queue = new Beanstalk();
    $queue->connect(); // ?

    return $queue;
};

Пример отложенной отправки почты

$this->mailer->queue('emails/xxx', [
    'test' => 'test' // Переменные для передачи в шаблон
], function($message) {
    $message->to('some_email@email.com');
    $message->subject('Test Email');
})

Вся отложенная почта помещается в очередь mailer (не знаю насколько это правильно)

Пример обработчика очереди https://github.com/vanchelo/phalcon-mailer/blob/master/example/mailer.php

Комментариев нет

Чтобы оставить комментарий необходимо авторизоваться