Вводная:
Иногда (крайне редко, но, как обычно, не вовремя) возникают ситуации, когда почтовый сервер не работает. Переустановка сертификата, ребут, то-да-сё.
И если в этот момент должно быть отправлено письмо, получаем проблему.
Конечно же, можно (и нужно) хендлить ->send(). Но иногда достаточно просто через какое-то время попробовать повторить отправку того же письма.
В чем состоит вопрос:
есть мысль сделать надстройку над SwiftMailer, которая будет сохранять данные из неотправленных писем в базу с тем, чтобы со временем отправить заново. Это избавит от повторного генерирования писем и необходимости следить за всеми случаями отправки.
Если subject, from, to можно извлечь из message через геттеры, то как правильно получить скомпилированное тело письма и куда его позже развернуть, чтобы повторно отправить?
Немного скомкано, но надеюсь, идея ясна.
SwiftMailer: автоматическая повторная отправка почты
Re: SwiftMailer: автоматическая повторная отправка почты
идея ясна. решение выше сказали - очередь.
Re: SwiftMailer: автоматическая повторная отправка почты
Интуитивно это понятно. Есть какая-то реализация в пределах движка?
Re: SwiftMailer: автоматическая повторная отправка почты
А по поводу
что-то подскажете?Екак правильно получить скомпилированное тело письма и куда его позже развернуть, чтобы повторно отправить?
Re: SwiftMailer: автоматическая повторная отправка почты
Например, в БД сохраняешь в табличке "outgoing_mail". Пишешь туда "исходные данные" - отрендеренное тело письма, получатель, и т.д. Сохраняешь в любом приемлемом виде, позже берёшь из БД и отправляешь.
Re: SwiftMailer: автоматическая повторная отправка почты
Подскажите, как получить отрендеренное тело письма, чтобы сохранить его в базу?
$mail = \Yii::$app->mailer->compose(['html' => 'views/mail-html', 'text' => 'views/mail-text'], $params)
->setTo([$user->mail => $user->mail])
->setSubject('Спасибо!')
->send();
$mail-> ???
$mail = \Yii::$app->mailer->compose(['html' => 'views/mail-html', 'text' => 'views/mail-text'], $params)
->setTo([$user->mail => $user->mail])
->setSubject('Спасибо!')
->send();
$mail-> ???
Re: SwiftMailer: автоматическая повторная отправка почты
Сам разобрался:
$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();
$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();