Swiftmailer remove attachment after send

前端 未结 3 1977
情深已故
情深已故 2021-01-15 03:53

I am trying to remove the attachment files after sending an email with Symfony 2.1 and Swiftmailer but if I delete the file before returnin

相关标签:
3条回答
  • 2021-01-15 04:03

    In order to complete the very good answer of james_t, if you use multiple mailers some changes are needed.

    Replace

    //  Default mailer
    $mailer = $this->container->get('mailer');
    
    $subject  = '...';
    $from     = '...';
    $to       = '...';
    $body     = '...';
    
    $message = \Swift_Message::newInstance()
        ->setSubject($subject)
        ->setFrom($from)
        ->setTo($to)
        ->setBody($body, 'text/html')
    ;
    
    //  Put e-mail in spool
    $result = $mailer->send($message);
    
    //  Flush spool queue
    $transport      = $mailer->getTransport();  
    $spool          = $transport->getSpool();
    $realTransport  = $this->container->get('swiftmailer.transport.real')
    $spool->flushQueue($realTransport);
    

    By

    //  Custom mailer
    $mailerServiceName  = 'myCustomMailer';
    $customMailer       = $this->container->get("swiftmailer.mailer.".$mailerServiceName);
    
    $subject  = '...';
    $from     = '...';
    $to       = '...';
    $body     = '...';
    
    $message = \Swift_Message::newInstance()
        ->setSubject($subject)
        ->setFrom($from)
        ->setTo($to)
        ->setBody($body, 'text/html')
    ;
    
    //  Put e-mail in spool
    $result = $customMailer->send($message);
    
    //  Flush spool queue
    $transport      = $customMailer->getTransport();  
    $spool          = $transport->getSpool();
    $realTransport  = $this->container->get('swiftmailer.mailer.'.$mailerServiceName.'.transport.real');
    $spool->flushQueue($realTransport);
    
    0 讨论(0)
  • 2021-01-15 04:04

    You can look at the code that processes memory spools here: https://github.com/symfony/SwiftmailerBundle/blob/master/EventListener/EmailSenderListener.php

    This is used to batch the emails to be sent.

    You can add this after your send() call and before your unlink() call to mimic the behavior of sending an email

            $transport = $this->container->get('mailer')->getTransport();  
    
            $spool = $transport->getSpool();
    
            $spool->flushQueue($this->container->get('swiftmailer.transport.real'));
    
    0 讨论(0)
  • 2021-01-15 04:04

    I am not sure, but the message spool might cause this problem. In SF2 memory spool is used by default, which means the messages are being sent on the kernel terminate event.

    So you'd have to flush the spool before deleting the file.

    If this is the cause of your problem, look here for a well explained solution: http://sgoettschkes.blogspot.de/2012/09/symfony-21-commands-and-swiftmailer.html

    0 讨论(0)
提交回复
热议问题