Swiftmailer удаляет вложение после отправки

Я пытаюсь удалить файлы вложений после отправки электронной почты с помощью Symfony 2.1 и Swiftmailer, но если я удалю файл перед возвратом объекта ответа (перенаправление), письмо не отправит.

Полагаю, это потому, что symfony отправляет электронное письмо в ответ, поэтому, когда письмо отправлено, приложение уже было удалено.

Например:

<?php // DefaultCotroller.php $message = \Swift_Message::newInstance($subject) ->setFrom('no-reply@dasi.es') ->setTo($emails_to) ->setBody($body, 'text/html') ->attach(\Swift_Attachment::fromPath('backup.rar')); $this->get('mailer')->send(); unlink('backup.rar'); // This remove the file but doesn't send the email! return $this->redirect($this->generateUrl('homepage')); 

Опция заключается в создании crontab для очистки файлов, но я предпочитаю не использовать его.

Благодаря!

Вы можете посмотреть код, который обрабатывает память spools здесь: https://github.com/symfony/SwiftmailerBundle/blob/master/EventListener/EmailSenderListener.php

Это используется для отправки электронных писем, которые нужно отправить.

Вы можете добавить это после своего вызова send() и перед вызовом unlink() чтобы имитировать поведение отправки сообщения электронной почты

  $transport = $this->container->get('mailer')->getTransport(); $spool = $transport->getSpool(); $spool->flushQueue($this->container->get('swiftmailer.transport.real')); 

Я не уверен, но катушка сообщения может вызвать эту проблему. В SF2 память используется по умолчанию, что означает, что сообщения отправляются на событие завершения ядра.

Поэтому перед удалением файла вам придется сбросить катушку.

Если это является причиной вашей проблемы, посмотрите здесь на хорошо объясненное решение: http://sgoettschkes.blogspot.de/2012/09/symfony-21-commands-and-swiftmailer.html