2013-08-13 20 views
8

Gmailアカウントを持つ単純なメールアプリケーションをhost.Itとして開発していますが、send()関数が例外をスローすると問題が発生します。 try catchステートメントが例外を処理できないことがわかりました。 グローバル例外クラスを使用しても動作しません。 この質問はどこかでも議論されています。例えばSwiftmailerの例外がSymfony2コントローラでキャッチしない

Catch swiftmailer exception in Symfony2 dev env controller

または

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')); 


    } 

私は放火魔コンソールで受信コードの上から送信された応答は次のとおりです。

{"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を持っている(つまりものの問題・オブコースです) 私は\ExceptionExceptionを変更したり、 \Swift_TransportExceptionまたはさらにSwift_TransportException!良い結果は得られません。

+0

'Swift_SwiftException'を試しましたか?このファイルには、 "Base Exception class"と書かれています。 – ferdynator

+0

"Base Exception class"で "Exception"を意味する – CoderInNetwork

+0

"Swift_SwiftException"と "\ Swift_SwiftException"でテストしました。動作しません。 – CoderInNetwork

答えて

1

私は、これはその中に

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()); 
     } 
    } 
} 

に対処するための悪い方法だと思いますけれども、あなたが、それは例外を送り返す前に、イベントディスパッチャを破ったので、イベントのこれらの種類に耳を傾け、彼らを黙らせる必要がありますコントローラあなたがスプーリングをオンにしている場合は、電子メールメッセージがその時点で$this->container->get("mailer")->send($message);を送信されていないん

$mailer = $this->get('mailer'); 

$mailer->registerPlugin(new SuchABadRequest()); 
3

http://symfony.com/doc/current/cookbook/email/spool.html

デフォルト設定がspool: { type: memory }の場合、コントローラの終了後、カーネル終了フェーズで\Swift_TransportExceptionがスローされます。 これを回避する方法の1つは、スプーリングをオフにすることです(ただし、電子メールの送信中にユーザーが待たなければならない場合があります)。または、例外を処理する独自のeventlistenerを作成できます。 http://symfony.com/doc/current/cookbook/service_container/event_listener.html

+0

この問題は何回もago.atに属しています。問題を解決できず、別の郵送用ライブラリを使用しました。残念ながら私はあなたのソリューションが今働いているかどうかわかりません – CoderInNetwork

関連する問題