Yii2 swiftmailer:获取生成的消息

时间:2015-02-20 10:49:57

标签: php yii2 swiftmailer

我想将已发送的电子邮件保存到数据库中。我使用Yii2和Swiftmailer,我的问题是:在发送之前或之前有没有办法获得经过处理的htmlBody(带变量的模板)?

如果不能,我如何在模型类中的$message变量中生成视图文件?

谢谢。

5 个答案:

答案 0 :(得分: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 :(得分:0)

是的,您可以轻松保存生成的电子邮件的Html Body

如果您的电子邮件是/controllers/XyzController.php发送代码:

<强> STEP: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('sohelahmed@peerbits.com')
      ->setFrom('example@mail.com')
      ->setSubject('Hello')
      ->setHtmlBody($message)
      ->send();

<强> STEP: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的第3行:1

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

通过

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

继续前进。 就是这样。

答案 2 :(得分:0)

只需在发送前保存邮件即可。如果您将内容保存为.EML文件,则效果非常好。

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

$mailMessage = $email->toString();

$email->send();

答案 3 :(得分:-1)

我不认为这是可能的。但你可以设置'useFileTransport'=&gt;在邮件程序组件的配置中为true。这会将邮件保存在运行时/邮件文件夹中,而不是发送它们。保存的文件采用eml格式,例如可以通过thunderbird查看。要更改文件夹的路径,请使用属性“fileTransportPath”。

据我所知,你不能同时发送&amp;将它们保存到文件系统。

希望我能帮助解决你的第一个问题。

答案 4 :(得分:-1)

您可以阅读有关fileTransportCallback:

的信息

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

作为回报,您将获得$mailer$message的回调。 将其保存到数据库