Symfony mailer: Swift_TransportException между отправкой сообщения - PullRequest
4 голосов
/ 01 июля 2011

В текущем проекте, над которым я сейчас работаю, у меня есть задача symfony, которая выполняет массовую вставку данных в базу данных и запускает ее как минимум полчаса.Когда задача запускается, почтовое уведомление отправляется правильно, проблема в том, что при выполнении задачи мы не можем отправить еще одно письмо, чтобы уведомить об окончании обработки.

Фабрика почтовой программы в настоящее время настроена сспулинговая стратегия доставки, но в этой конкретной ситуации мы хотим немедленно запустить уведомление, используя метод sendNextImmediately ().

Я получаю исключение:

[Swift_TransportException]
Ожидаемый код ответа 250, но получил код "451" с сообщением "451 4.4.2 Тайм-аут - закрытие соединения. 74sm1186065wem.17"

и текущая ошибка в файле журнала php:

Предупреждение: fwrite (): SSL: неработающий канал в /var/www/project/lib/vendor/symfony/lib/vendor/swiftmailer/classes/Swift/Transport/StreamBuffer.php в строке 209

Может кто-нибудь помочь?Есть ли способ, которым я могу обновить Symfony Mailer, чтобы установить новое соединение?

Ответы [ 3 ]

5 голосов
/ 07 ноября 2011

В проекте Symfony2 я тоже столкнулся с этой ошибкой.Мы использовали постоянно работающий скрипт php, который выдал ошибку.

Мы выяснили, что следующий код выполняет свою работу:

private function sendEmailMessage($renderedTemplate, $subject, $toEmail)
    {
        $mailer = $this->getContainer()->get('mailer');
        /* @var $mailer \Swift_Mailer */
        if(!$mailer->getTransport()->isStarted()){
            $mailer->getTransport()->start();
        }
        $sendException = null;
        /* @var $message \Swift_Message */
        $message = \Swift_Message::newInstance()
            ->setSubject($subject)
            ->setFrom($this->getContainer()->getParameter('email_from'))
            ->setTo($toEmail)
            ->setBody($renderedTemplate);


        $mailer->send($message);
        $mailer->getTransport()->stop();
        //throw $sendException;
    }
1 голос
/ 04 июля 2011

Для пользователей Symfony1

Я предположил, что соединение удерживалось слишком долго (без активности), что вызвало тайм-аут соединения ssl.

На данный момент проблему можно решить, остановив экземпляр Swift_Transport и запустив его снова явно, непосредственно перед отправкой второго сообщения.

Вот код:

$this->getMailer()->getRealtimeTransport()->stop();
$this->getMailer()->getRealtimeTransport()->start();
$this->getMailer()->sendNextImmediately()->send($message);
0 голосов
/ 24 августа 2012

У меня была точно такая же проблема, и вышеупомянутые решения были очень полезны, но есть одна вещь, которую я должен был сделать по-другому: заказ.

$this->getMailer()->sendNextImmediately()->send($message);
$this->getMailer()->getRealtimeTransport()->stop();

У меня не получилось, если я попытался остановить транспорт перед отправкой сообщения (тайм-аут соединения уже завис). Также вам не нужно запускать getRealtimeTransport () -> start () - он будет запущен автоматически.

...