发送电子邮件时出错 [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);

希望这个回答对您有所帮助