发送电子邮件时出错 [Symfony mailerBundle]
Error while sending email [Symfony mailerBundle]
我正在使用 symfony 4 构建一个网站,今天我尝试使用 symfony 的 emailBundle 发送电子邮件,我还使用 mailgun 包作为传输。
一切都配置好了。
当我使用 ->text() 或 ->html() 以经典方式发送电子邮件时,一切正常,但是当我将 twig 模板用于电子邮件时,出现此错误:
Unable to send an email: Need at least one of 'text' or 'html'
parameters specified (code 400).
这是邮件发送的代码部分:
<?php
$email = (new TemplatedEmail())
->from(new NamedAddress('blabla','blabla'))
->to($user->getEmail())
->subject('Account registration')
->htmlTemplate('emails/signup.html.twig')
->context([
'firstName' => $user->getFirstName(),
'email' => $user->getEmail(),
'url' => $_ENV['blabla'].'/account'
]);
$transport = new MailgunTransport($_ENV['blabla'],$_ENV['blabla']);
$mailer = new Mailer($transport);
$mailer->send($email);
?>
提前致谢
如果消息未使用 TemplatedEmail
呈现,您需要使用关联的 Symfony\Bridge\Twig\Mime\BodyRenderer
手动呈现它。
您的代码将类似于:
use Symfony\Bridge\Twig\Mime\BodyRenderer;
use Twig\Environment;
//$twig, an instance of Twig\Environment need to be injected
$email = (new TemplatedEmail());
//[...]
$mailer = new Mailer($transport);
$renderer = new BodyRenderer($twig);
$renderer->render($email);
$mailer->send($email);
查看 BodyRenderer 的测试用例:
https://github.com/symfony/symfony/blob/e60a876201b5b306d0c81a24d9a3db997192079c/src/Symfony/Bridge/Twig/Tests/Mime/BodyRendererTest.php
感谢@smwhr 的帮助,但我找到了解决方案,
所以如果有人感兴趣,解决方案是:
删除这两行:
$transport = new YourTransportMethod($_ENV['blabla'],$_ENV['blabla']);
$mailer = new Mailer($transport);
并在方法声明中使用邮件程序接口,如下所示:
blabla(LoginAuthenticator $authenticator, MailerInterface $mailer): Response
工作代码:
$email = (new TemplatedEmail())
->from(new NamedAddress('blabla','blabla'))
->to(new NamedAddress($user->getEmail(),$user->getFirstName()))
->subject('Account registration')
->htmlTemplate('emails/signup.html.twig')
->context([
'firstName' => $user->getFirstName(),
'email' => $user->getEmail(),
'url' => $_ENV['blabla'].'/account'
]);
$mailer->send($email);
希望这个回答对您有所帮助
我正在使用 symfony 4 构建一个网站,今天我尝试使用 symfony 的 emailBundle 发送电子邮件,我还使用 mailgun 包作为传输。 一切都配置好了。
当我使用 ->text() 或 ->html() 以经典方式发送电子邮件时,一切正常,但是当我将 twig 模板用于电子邮件时,出现此错误:
Unable to send an email: Need at least one of 'text' or 'html' parameters specified (code 400).
这是邮件发送的代码部分:
<?php
$email = (new TemplatedEmail())
->from(new NamedAddress('blabla','blabla'))
->to($user->getEmail())
->subject('Account registration')
->htmlTemplate('emails/signup.html.twig')
->context([
'firstName' => $user->getFirstName(),
'email' => $user->getEmail(),
'url' => $_ENV['blabla'].'/account'
]);
$transport = new MailgunTransport($_ENV['blabla'],$_ENV['blabla']);
$mailer = new Mailer($transport);
$mailer->send($email);
?>
提前致谢
如果消息未使用 TemplatedEmail
呈现,您需要使用关联的 Symfony\Bridge\Twig\Mime\BodyRenderer
手动呈现它。
您的代码将类似于:
use Symfony\Bridge\Twig\Mime\BodyRenderer;
use Twig\Environment;
//$twig, an instance of Twig\Environment need to be injected
$email = (new TemplatedEmail());
//[...]
$mailer = new Mailer($transport);
$renderer = new BodyRenderer($twig);
$renderer->render($email);
$mailer->send($email);
查看 BodyRenderer 的测试用例: https://github.com/symfony/symfony/blob/e60a876201b5b306d0c81a24d9a3db997192079c/src/Symfony/Bridge/Twig/Tests/Mime/BodyRendererTest.php
感谢@smwhr 的帮助,但我找到了解决方案,
所以如果有人感兴趣,解决方案是:
删除这两行:
$transport = new YourTransportMethod($_ENV['blabla'],$_ENV['blabla']);
$mailer = new Mailer($transport);
并在方法声明中使用邮件程序接口,如下所示:
blabla(LoginAuthenticator $authenticator, MailerInterface $mailer): Response
工作代码:
$email = (new TemplatedEmail())
->from(new NamedAddress('blabla','blabla'))
->to(new NamedAddress($user->getEmail(),$user->getFirstName()))
->subject('Account registration')
->htmlTemplate('emails/signup.html.twig')
->context([
'firstName' => $user->getFirstName(),
'email' => $user->getEmail(),
'url' => $_ENV['blabla'].'/account'
]);
$mailer->send($email);
希望这个回答对您有所帮助