gpt4 book ai didi

php - Symfony SwiftMailer : not sending if the controller does not return a $this->render() response

转载 作者:行者123 更新时间:2023-12-03 20:12:21 25 4
gpt4 key购买 nike

我有一个 Symfony 项目(非常简化)如下所示:

Controller/MyToolController.php

namespace App\Controller;

use App\Services\ToolsService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class MyToolController extends AbstractController
{
private $toolsService;


/**
* @param ToolsService|null $toolsService
*/
public function __construct(ToolsService $toolsService = null) {
$this->toolsService = $toolsService;
}

public function run() {
// some more code here...

$mailContent = $this->render('site/mail.html.twig', $data)->getContent();
$this->toolsService->sendMail($from, $to, $bcc, $mailContent, $subject);

// if I remove the following line, no emails are sent out!
return $this->render('site/thankyou.html.twig', $data);

}
}

Services/MyToolService.php

namespace App\Services;

class ToolsService
{

/** @var \Swift_Mailer */
private $mailer;

/**
* @param \Swift_Mailer $mailer
*/
public function __construct(\Swift_Mailer $mailer)
{
$this->mailer = $mailer;
}

public function sendMail($from, $to, $bcc, $body, $subject) {
$mail = ( new \Swift_Message() )
->setSubject($subject)
->setFrom($from)
->setTo($to)
->setBcc($bcc)
->addPart($body, 'text/html');

$res = $this->mailer->send($mail);
$this->logger->info('Email sent');

return $res;
}
}

如果你看MyToolController.php您会看到我调用了发送电子邮件的服务。

如果我返回 Response我的对象run()函数,一切顺利 - 但如果我省略这个,则不会发送任何内容。如果我循环发送多封电子邮件并且遇到超时,情况也是如此。

奇怪的是$mailer->send()无论如何都会被调用 - 它返回 1 - 我在 sendmail() 中写入的日志中看到一个条目功能。但没有电子邮件离开服务器。

这是我的 SwiftMailer 配置:

swiftmailer:
url: '%env(MAILER_URL)%'
spool: { type: 'memory' }

最佳答案

您的邮件正在内存中假脱机,which means :

When you use spooling to store the emails to memory, they will get sent right before the kernel terminates. This means the email only gets sent if the whole request got executed without any unhandled exception or any errors.

如果您没有从 Controller 返回 Response 对象,将会出现未处理的异常,整个请求将不会被执行>,并且邮件将永远不会被发送。

Controller 需要返回一个 Symfony\Component\HttpFoundation\Response 以便可以正常处理请求。如果您想返回空响应,您可以简单地执行以下操作:

return new Response();

关于php - Symfony SwiftMailer : not sending if the controller does not return a $this->render() response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60512680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com