Nano Hash - криптовалюты, майнинг, программирование

Исключение Swiftmailer не срабатывает в контроллере Symfony2

Я разрабатываю простое почтовое приложение с учетной записью Gmail в качестве хоста. Оно работает как шарм, но проблема возникает, когда функция send() выдает исключение. Я вижу, что оператор try catch не может обработать исключение. Это не работает, даже когда я использую глобальный класс исключений. этот вопрос обсуждался где-то также.

Например :

Поймать исключение swiftmailer в контроллере Symfony2 dev env

or

https://groups.google.com/forum/#!topic/symfony2/SlEzg_PKwJw

но они не достигли рабочего ответа.

Мой код функции контроллера:

    public function ajaxRegisterPublisherAction()
    {

//some irrelevant logic

     $returns=  json_encode(array("username"=>$username,"responseCode"=>$responseCode));


    try{
            $message = \Swift_Message::newInstance()
        ->setSubject('hello world')
        ->setFrom('[email protected]')
        ->setTo('[email protected]')
        ->setBody(
            $this->renderView('AcmeSinamelkBundle:Default:email.txt.twig',array('name'=>$username,"password"=>$password))
        );
      $this->container->get("mailer")->send($message);

    }
   catch (Exception $e)
    {

    }



    return new \Symfony\Component\HttpFoundation\Response($returns,200,array('Content-Type'=>'application/json'));


    }

Ответ, отправленный из приведенного выше кода, который я получаю в консоли Firebug:

{"username":"xzdvxvvcvxcv","responseCode":200}<!DOCTYPE html>
<html>
    .
    .
Swift_TransportException: Connection could not be established with host smtp.gmail.com [Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?]
    .
    .
</html>

и я ловлю себя на волоске, потому что я не знаю, почему ядро ​​​​обрабатывает исключение в продолжении моего объекта json?

когда я комментирую эту строку:

 $this->container->get("mailer")->send($message);

исключение не возникает, и у меня есть действительный json на стороне клиента (это само собой разумеющееся, хотя) я изменил Exception на \Exception или \Swift_TransportException или даже Swift_TransportException ! но без хорошего результата.

13.08.2013

  • Вы пробовали Swift_SwiftException? В файле написано Базовый класс исключений. 13.08.2013
  • я имею в виду «Исключение» по базовому классу исключений 13.08.2013
  • Я тестировал Swift_SwiftException и \Swift_SwiftException сейчас. Это не работает. 13.08.2013
  • вы используете спулер? 13.08.2013
  • Я не знаю, что вы имеете в виду под спулером, но я точно делаю настройку в symfony.com/doc/current/cookbook/email/gmail.html за исключением того, что я намеренно отключил расширение openssl в php.ini, чтобы вызвать исключение!! благодарю вас :) 13.08.2013

Ответы:


1

Когда вы делаете $this->container->get("mailer")->send($message);, сообщение электронной почты не отправляется в этот момент, если у вас включена буферизация. См. http://symfony.com/doc/current/cookbook/email/spool.html

Если у вас есть настройка по умолчанию spool: { type: memory }, \Swift_TransportException будет выброшена на этапе завершения работы ядра после выхода вашего контроллера. Один из способов обойти это — отключить буферизацию (но тогда вашим пользователям, возможно, придется ждать, пока отправляется электронное письмо), или вы можете создать свой собственный прослушиватель событий для обработки исключения. http://symfony.com/doc/current/cookbook/service_container/event_listener.html

11.10.2014
  • эта проблема возникла так много раз назад. в финале мы не смогли решить проблему и поэтому использовали другую библиотеку рассылки. к сожалению, я не знаю, работает ли ваше решение сейчас или нет 12.10.2014

  • 2

    вам нужно победить диспетчера событий, прежде чем он отправит исключение, поэтому слушайте такие события и отключайте их, хотя я думаю, что это ПЛОХОЙ способ справиться с этим.

    class SuchABadRequest implements \Swift_Events_TransportExceptionListener{
    
        /**
         * Invoked as a TransportException is thrown in the Transport system.
         *
         * @param \Swift_Events_TransportExceptionEvent $evt
         */
        public function exceptionThrown(\Swift_Events_TransportExceptionEvent $evt)
        {
    
            $evt->cancelBubble();
    
            try{
                throw $evt->getException();
            }catch(\Swift_TransportException $e){
                print_r($e->getMessage());
            }
        }
    }
    

    внутри контроллера

    $mailer = $this->get('mailer');
    
    $mailer->registerPlugin(new SuchABadRequest());
    
    08.10.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..