Php Symfony SwiftMailer:如果控制器未返回$this->;render()响应
我有一个Symfony项目,它(非常简化)如下所示: Controller/MyToolController.php Services/MyToolService.php 如果您查看Php Symfony SwiftMailer:如果控制器未返回$this->;render()响应,php,symfony,symfony4,swiftmailer,Php,Symfony,Symfony4,Swiftmailer,我有一个Symfony项目,它(非常简化)如下所示: Controller/MyToolController.php Services/MyToolService.php 如果您查看MyToolController.php,您会看到我调用了一个发送电子邮件的服务 如果我在run()函数中返回Response对象,一切都会进行得很顺利-但是如果我忽略了这一点,则不会发送任何内容。同样,如果我在一个循环中发送多封电子邮件,并且遇到超时 奇怪的是,在任何情况下都会调用$mailer->send(),它
MyToolController.php
,您会看到我调用了一个发送电子邮件的服务
如果我在run()
函数中返回Response
对象,一切都会进行得很顺利-但是如果我忽略了这一点,则不会发送任何内容。同样,如果我在一个循环中发送多封电子邮件,并且遇到超时
奇怪的是,在任何情况下都会调用$mailer->send()
,它返回1,我在sendmail()函数中编写的日志中看到一个条目。但是没有电子邮件离开服务器
这是我的SwiftMailer配置:
swiftmailer:
url: '%env(MAILER_URL)%'
spool: { type: 'memory' }
您的邮件正在内存中进行后台处理:
当您使用假脱机将电子邮件存储到内存中时,它们将在内核终止之前被发送。这意味着只有当整个请求在没有任何未处理的异常或错误的情况下执行时,才会发送电子邮件
如果您没有从控制器返回响应
对象,则将出现未处理的异常,整个请求将不会执行,邮件将永远不会发送
控制器需要返回Symfony\Component\HttpFoundation\Response
,以便正常处理请求。如果要返回空响应,只需执行以下操作:
return new Response();
你的swiftmailer配置是什么?假脱机邮件肯定会导致这种情况。还有swift发送邮件响应Symfony@β.εηοτ.βε-内核结束事件的内核结束事件?听起来很有趣-你有更多的信息吗?谢谢@Gerfried我的记忆不是完全正确的,正如yivi的回答所指出的,正确的事件是正确的,但是从用户体验的角度来看,提供一个空白页面看起来会很糟糕,最好是$this->redirect('somewhere')
考虑到OP根本不想返回响应,我想这不是他们关心的问题。
swiftmailer:
url: '%env(MAILER_URL)%'
spool: { type: 'memory' }
return new Response();