我想将已发送的电子邮件保存到数据库中。我使用Yii2和Swiftmailer,我的问题是:在发送之前或之前有没有办法获得经过处理的htmlBody(带变量的模板)?
如果不能,我如何在模型类中的$message
变量中生成视图文件?
谢谢。
答案 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
的回调。
将其保存到数据库