SwiftMailer 无法发送 TemplatedEmail ,symfony 4
SwiftMailer can not send TemplatedEmail , symfony 4
这里是 swiftmailer 所说的,尽管 symfony 4 文档说我们可以发送这样的 TemplatedEmail 对象,但这是不可能的:
Argument 1 passed to Swift_Mailer::send() must be an instance of
Swift_Mime_SimpleMessage, instance of
Symfony\Bridge\Twig\Mime\TemplatedEmail given, called in
/home/tk/html/src/Service/MailService.php on line 103
用于在我的 MailService 中发送我的 html 邮件的代码:
// ...
use Swift_Mailer;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
class MailService {
// ...
public function sendOwnerPollsAction( Owner $foundOwner ) {
// anti spam , limit to every minute TODO
// $lastSend = $admin_user->getRequestedPollsDate();
// $now = new \DateTime();
// if ( date_diff( $lastSend, $now ) < 60 ) {
// // too soon!
// die( 'too soon!' );
// }
// $admin_user->setRequestedPollsDate( $now );
// $em->persist( $admin_user );
// $em->flush();
$titleEmail = 'Framadate | Mes sondages';
$templateVars = [
'owner' => $foundOwner,
'title' => $titleEmail,
'email_template' => 'emails/owner-list.html.twig',
];
$email = ( new TemplatedEmail() )
->from( 'ne-pas-repondre@framadate-api.cipherbliss.com' )
->to( new Address( $foundOwner->getEmail() ) )
->subject( $titleEmail )
->htmlTemplate( $templateVars[ 'email_template' ] )
->context( $templateVars );
// send email
return $this->mailer->send( $email );
}
symfony 4 的 swiftmailer 文档说我们可以像那样发送邮件,并且 templatedemail 扩展了电子邮件。
https://symfony.com/doc/4.3/mailer.html#creating-sending-messages
所以我不明白我们如何发送模板化 html 电子邮件。
包:
"symfony/framework-bundle": "4.3.*",
"symfony/swiftmailer-bundle": "^3.4",
"php": "^7.1.3",
您正在将 Symfony Mailer 与 Swift Mailer 混合使用。
TemplatedEmail 来自 SymfonyMailer,但您正在尝试使用 SwiftMailer 发送。因此报错。
如果您真的想使用 Swift Mailer,则需要您的 TemplateEmail 部分。
$message = (new \Swift_Message($titleEmail))
->setFrom('ne-pas-repondre@framadate-api.cipherbliss.com')
->setTo(new Address( $foundOwner->getEmail() ))
->setBody(
$this->renderView(
'emails/owner-list.html.twig',
[
'title' => $titleEmail,
'email_template' => 'emails/owner-list.html.twig'
]
),
'text/html'
)
$mailer->send($message);
如果您想将 TemplatedEmail 与 SymfonyMailer 一起使用,请遵循 Mailer on Symfony。还有其他配置需要完成。
这里是 swiftmailer 所说的,尽管 symfony 4 文档说我们可以发送这样的 TemplatedEmail 对象,但这是不可能的:
Argument 1 passed to Swift_Mailer::send() must be an instance of Swift_Mime_SimpleMessage, instance of Symfony\Bridge\Twig\Mime\TemplatedEmail given, called in /home/tk/html/src/Service/MailService.php on line 103
用于在我的 MailService 中发送我的 html 邮件的代码:
// ...
use Swift_Mailer;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
class MailService {
// ...
public function sendOwnerPollsAction( Owner $foundOwner ) {
// anti spam , limit to every minute TODO
// $lastSend = $admin_user->getRequestedPollsDate();
// $now = new \DateTime();
// if ( date_diff( $lastSend, $now ) < 60 ) {
// // too soon!
// die( 'too soon!' );
// }
// $admin_user->setRequestedPollsDate( $now );
// $em->persist( $admin_user );
// $em->flush();
$titleEmail = 'Framadate | Mes sondages';
$templateVars = [
'owner' => $foundOwner,
'title' => $titleEmail,
'email_template' => 'emails/owner-list.html.twig',
];
$email = ( new TemplatedEmail() )
->from( 'ne-pas-repondre@framadate-api.cipherbliss.com' )
->to( new Address( $foundOwner->getEmail() ) )
->subject( $titleEmail )
->htmlTemplate( $templateVars[ 'email_template' ] )
->context( $templateVars );
// send email
return $this->mailer->send( $email );
}
symfony 4 的 swiftmailer 文档说我们可以像那样发送邮件,并且 templatedemail 扩展了电子邮件。 https://symfony.com/doc/4.3/mailer.html#creating-sending-messages 所以我不明白我们如何发送模板化 html 电子邮件。
包:
"symfony/framework-bundle": "4.3.*",
"symfony/swiftmailer-bundle": "^3.4",
"php": "^7.1.3",
您正在将 Symfony Mailer 与 Swift Mailer 混合使用。
TemplatedEmail 来自 SymfonyMailer,但您正在尝试使用 SwiftMailer 发送。因此报错。
如果您真的想使用 Swift Mailer,则需要您的 TemplateEmail 部分。
$message = (new \Swift_Message($titleEmail))
->setFrom('ne-pas-repondre@framadate-api.cipherbliss.com')
->setTo(new Address( $foundOwner->getEmail() ))
->setBody(
$this->renderView(
'emails/owner-list.html.twig',
[
'title' => $titleEmail,
'email_template' => 'emails/owner-list.html.twig'
]
),
'text/html'
)
$mailer->send($message);
如果您想将 TemplatedEmail 与 SymfonyMailer 一起使用,请遵循 Mailer on Symfony。还有其他配置需要完成。