Yii2 swiftmailer: получить сгенерированное сообщение

0

Я хотел бы сохранить в базе данных отправленные письма. Я использую Yii2 с Swiftmailer, и мой вопрос: есть ли способ получить genereated htmlBody (шаблон с переменными) после или до отправки?

Если нет, то как я могу сгенерировать файл представления в переменной $message в классе модели?

Спасибо.

Теги:
yii2
swiftmailer

5 ответов

0

Просто сохраните сообщение перед отправкой. Если вы сохраните контент как.EML файл, он отлично работает.

$email = Yii::$app->mailer->compose('simpleEmail')
    ->setFrom(['[email protected]' => 'Sender Name'])
    ->setTo($emails_array)
    ->setSubject('subject');

$mailMessage = $email->toString();

$email->send();
0

Да, вы можете легко сохранить Html Body сгенерированной электронной почты

Если у вас есть код отправки электронной почты в /controllers/XyzController.php:

ШАГ 1

    $param = 'some value';
    $path_to_email_template = '@app/mail/layouts/eg';
    $message = $this->renderPartial($path_to_email_template, ['param'=>$param]);
    echo "$message"; // test
    \Yii::$app->mailer->compose()
      ->setTo('[email protected]')
      ->setFrom('[email protected]')
      ->setSubject('Hello')
      ->setHtmlBody($message)
      ->send();

ШАГ 2

Теперь у вас есть тело электронной почты, хранящееся в переменной $message и вы можете сохранить его как

$model = new Somemodel; // consider Somemodel model
$model->html_content = $message; // consider Somemodel model have attribute 'html_content'
// assign another properties too, if any
$model->save(true);
// Great, email body saved in DataBase, if no validation error occurs. If validation error occurs use print_r($model->errors); to debug

И если вы отправляете почту в любом файле вида, то в /views/xyx/index.php (скажем, в файле index.php)

Заменить третью строку STEP: 1

$message = $this->renderPartial($path_to_email_template, ['param'=>$param]);

от

$message = $this->render($path_to_email_template, ['param'=>$param]);

и продолжайте дальше. Это.

0

Вы можете сохранить HTML в файле вида:

$message = Yii::$app->mailer->compose('myview', ['param1'=>'param'])
  ->setTo('...')
  ->setFrom('...')
  ->setSubject('');

//And then maybe you can get the textBody
$body = $message->getTextBody();//I'm not sure for this part

return $message->send();

Файл вида (myview) должен находиться в папке "mail" (/mail/myview.php). Я не тестировал его.

См. Doc: http://www.yiiframework.com/doc-2.0/guide-tutorial-mailing.html#composing-mail-content

-1

Вы можете прочитать о fileTransportCallback:

http://www.yiiframework.com/doc-2.0/yii-mail-basemailer.html#$fileTransportCallback-detail

В ответ вы получите обратный вызов с $mailer и $message. Сохранить в базе данных

-1

Я не думаю, что это возможно. Но вы можете установить 'useFileTransport' => true в настройке компонента почтовой программы. Это позволит сохранить почту в папке времени выполнения/почты вместо отправки. Сохраненные файлы находятся в eml-формате, который может быть просмотрен, например, thunderbird. Чтобы изменить путь к папке, используйте свойство fileTransportPath.

Насколько я знаю, вы не можете делать и отправлять и сохранять их в файловую систему.

Надеюсь, я смогу помочь с вашим первым вопросом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню