Php 发送电子邮件时出错[Symfony mailerBundle]

Php 发送电子邮件时出错[Symfony mailerBundle],php,symfony,email,twig,symfony4,Php,Symfony,Email,Twig,Symfony4,我正在用symfony 4建立一个网站,今天我尝试用symfony的emailBundle发送电子邮件,我也使用mailgun bundle作为传输工具。 一切都配置得很好 当我使用->text()或->html()的经典方式发送电子邮件时,一切都正常,但当我使用细枝模板发送电子邮件时,会出现以下错误: 无法发送电子邮件:需要至少一个“文本”或“html” 指定的参数(代码400) 这是邮件发送的代码部分: <?php $email = (new Templated

我正在用symfony 4建立一个网站,今天我尝试用symfony的emailBundle发送电子邮件,我也使用mailgun bundle作为传输工具。 一切都配置得很好

当我使用->text()或->html()的经典方式发送电子邮件时,一切都正常,但当我使用细枝模板发送电子邮件时,会出现以下错误:

无法发送电子邮件:需要至少一个“文本”或“html” 指定的参数(代码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
手动呈现消息

然后,您的代码将类似于:

使用Symfony\Bridge\Twig\Mime\BodyRenderer;
使用细枝\环境;
//$twig,需要注入twig\Environment的实例
$email=(新的TemplatedEmail());
//[...]
$mailer=新的mailer($transport);
$renderer=newbodyrenderer($twig);
$renderer->render($email);
$mailer->send($email);
请参见BodyRenderer的测试用例:
谢谢@smwhr的帮助,但我找到了解决方案

因此,如果有人感兴趣,解决方案是:

删除以下两行:

$transport = new YourTransportMethod($_ENV['blabla'],$_ENV['blabla']);
$mailer = new Mailer($transport);
并在方法声明中使用mailer接口,如下所示:

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);

我希望这个答案能帮助你,你有没有试着用提供的上下文打印
电子邮件/signup.html.twig
的内容?当调用
htmlTemplate()
返回一个空内容时,会引发此错误。是的,我创建了一个测试路由,用上下文呈现“emails/signup.html.twig”,一切看起来都正常。但是,当我进行var_转储($email->getHtmlBody())时,我会得到空响应;当我进行var_转储($email->getHtmlTemplate())时,我会得到“emails/signup.html.twig”。