Symfony Swiftmailer:有条件地假脱机电子邮件或立即发送

时间:2017-11-01 12:49:35

标签: symfony email conditional-statements swiftmailer spool

有没有人在Symfony中使用Swiftmailer设置假脱机电子邮件的条件? 我希望可以选择立即发送电子邮件或将其换成文件,具体取决于我正在运行的功能。

我在自己的Bundle中提取了电子邮件服务,并在需要时调用其他Bundle中的sendEmail()函数。但是对于一些Bundles / Functions,我希望立即发送电子邮件给其他人,假脱机是好的。我想在sendEmail()函数中使用 spool 参数,所以如果在调用函数时参数设置为true,则电子邮件会被假脱机,如果它被设置为false,它们会得到立即发送。

或许一个简单的if条件就足够了?]

任何想法,提示,经验等都会很棒!

更新

在我的config.yml中:

# Swiftmailer Configuration
swiftmailer:
    transport: "%mailer_transport%"
    host:      "%mailer_host%"
    username:  "%mailer_user%"
    password:  "%mailer_password%"
    spool:
          type: file
          path: /srv/http/test/spool

1 个答案:

答案 0 :(得分:1)

通过在参数中指定spool选项,Swiftmailers将使用Swift_Transport_SpoolTransport的实例,它将通过向队列发送消息来管理假脱机,而不是直接将它们发送到世界。通过Transport对象,您可以访问Spool实例(Swift_MemorySpoolSwift_FileSpool)并强制Swiftmailer刷新队列。

// custom function to send an email
// inject \Swift_Mailer like you normally would
public function sendMessage($name, \Swift_Mailer $mailer, $bypassSpool = false)
{
    $message = new \Swift_Message('Hello Email')
        ->setFrom(/* from */)
        ->setTo(/* to */)
        ->setBody(/* render view */);

    $mailer->send($message); // pushes the message to the spool queue

    if($bypassSpool) {
        $spool = $mailer->getTransport->getSpool()
        $spool->flushQueue(new Swift_SmtpTransport(
            /* Get host, username and password from config */
        ));
    }
}