Symfony SwiftMailer 内存邮件队列

3

我希望了解更多有关swiftmailer中的邮件排队功能。实际上,我使用的是swiftmailer中的内存排队类型:

swiftmailer:
    transport:          "%mailer_transport%"
    host:               "%mailer_host%"
    port:               "%mailer_port%"
    encryption:         "%mailer_encryption%"
    username:           "%mailer_user%"
    password:           "%mailer_password%"
    spool:              { type: memory }

我在一个被 AJAX 调用的 Symfony 方法中以这种方式发送电子邮件:

public function ajaxAction(Request $request)
{
    if ($request->isXMLHttpRequest()) {
            $data = $request->request->get('contact');
            $message = \Swift_Message::newInstance()
                ->setSubject('Contact site')
                ->setFrom('postmaster@mywebsite.com')
                ->setTo('contact@mywebsite.com')
                ->setBody(
                    $this->renderView(
                        'MyAppMyBundle:Emails:contact.html.twig',
                        array('name' => $data['name'], 'mail' => $data['mail'], 'message' => $data['message'])
                    ),
                    'text/html'
                );

            $this->get('mailer')->send($message);
            return new Response('Mail sent', 200);
     }
}

这导致了一个非常耗时的AJAX调用: enter image description here 我以为邮件池会在kernel.terminate事件之后发送电子邮件,但看起来它是在kernel.terminate中完成的。由此导致AJAX调用非常长,我无法享受到邮件池的期望优点。 您能帮忙吗?


使用控制台命令 bin/console swiftmailer:debug 检查配置。 - Matteo
名称:默认(默认邮件发送程序),传输:SMTP,暂存器:是,投递:是。 - ybert
1个回答

2
如 Symfony 文档所解释的那样,内存邮件池会在 kernel.terminate 事件之前发送邮件。
在这种情况下,您可能需要使用基于文件的邮件池,如《如何使用 Symfony 进行邮件池》文章中所述。请参考此链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接