SwiftMailer: автоматическая повторная отправка почты

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
rommcr
Сообщения: 128
Зарегистрирован: 2014.12.24, 16:35

SwiftMailer: автоматическая повторная отправка почты

Сообщение rommcr »

Вводная:

Иногда (крайне редко, но, как обычно, не вовремя) возникают ситуации, когда почтовый сервер не работает. Переустановка сертификата, ребут, то-да-сё.

И если в этот момент должно быть отправлено письмо, получаем проблему.

Конечно же, можно (и нужно) хендлить ->send(). Но иногда достаточно просто через какое-то время попробовать повторить отправку того же письма.

В чем состоит вопрос:
есть мысль сделать надстройку над SwiftMailer, которая будет сохранять данные из неотправленных писем в базу с тем, чтобы со временем отправить заново. Это избавит от повторного генерирования писем и необходимости следить за всеми случаями отправки.

Если subject, from, to можно извлечь из message через геттеры, то как правильно получить скомпилированное тело письма и куда его позже развернуть, чтобы повторно отправить?

Немного скомкано, но надеюсь, идея ясна.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: SwiftMailer: автоматическая повторная отправка почты

Сообщение zelenin »

идея ясна. решение выше сказали - очередь.
rommcr
Сообщения: 128
Зарегистрирован: 2014.12.24, 16:35

Re: SwiftMailer: автоматическая повторная отправка почты

Сообщение rommcr »

Интуитивно это понятно. Есть какая-то реализация в пределах движка?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: SwiftMailer: автоматическая повторная отправка почты

Сообщение zelenin »

rommcr писал(а): 2017.12.30, 10:24 Интуитивно это понятно. Есть какая-то реализация в пределах движка?
yii2-queue
rommcr
Сообщения: 128
Зарегистрирован: 2014.12.24, 16:35

Re: SwiftMailer: автоматическая повторная отправка почты

Сообщение rommcr »

А по поводу
Екак правильно получить скомпилированное тело письма и куда его позже развернуть, чтобы повторно отправить?
что-то подскажете?
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: SwiftMailer: автоматическая повторная отправка почты

Сообщение Nex-Otaku »

Например, в БД сохраняешь в табличке "outgoing_mail". Пишешь туда "исходные данные" - отрендеренное тело письма, получатель, и т.д. Сохраняешь в любом приемлемом виде, позже берёшь из БД и отправляешь.
Animatik
Сообщения: 10
Зарегистрирован: 2017.08.24, 17:12

Re: SwiftMailer: автоматическая повторная отправка почты

Сообщение Animatik »

Подскажите, как получить отрендеренное тело письма, чтобы сохранить его в базу?

$mail = \Yii::$app->mailer->compose(['html' => 'views/mail-html', 'text' => 'views/mail-text'], $params)
->setTo([$user->mail => $user->mail])
->setSubject('Спасибо!')
->send();


$mail-> ???
Animatik
Сообщения: 10
Зарегистрирован: 2017.08.24, 17:12

Re: SwiftMailer: автоматическая повторная отправка почты

Сообщение Animatik »

Сам разобрался:

$mail_template = '@app/mail/views/mail-html';
$message = \Yii::$app->view->render($mail_template, $params); // Наше письмо

\Yii::$app->mailer->compose()
->setTo([$user->mail => $user->mail])
->setFrom([Yii::$app->params['supportEmail'] => 'site'])
->setSubject('Спасибо!')
->setHtmlBody($message)
->send();
Ответить