2017-01-18 7 views
1

私は最近、このWebサイト(Symfony 2で作成)を新しいサーバーに移行し、Google Appsを使って電子メールを送信することに決めました。Symfony 2:Swiftmailerが送信していない、エラーがありません

接続の問題が発生した後、Iveはそれを設定することができました。電子メールが送信されると、私はすぐにそれを受け取る、

app/console swiftmailer:email:send --subject="Test" --body="test" --from="xxxx" --to="yyyyy" 

をそれは動作します:私は、私が使用してコマンドラインでメールを送信することができますので、作業している知っています。

問題は次のとおりです。サイト内で動作していません。コードは次のとおりです。

    $mailer = $this->get('mailer'); 
        $message = $mailer->createMessage() 
             ->setSubject('Caderno Mágico: Redefinir Senha') 
             ->setFrom(array($this->container->getParameter('server_mail_address') => 'Caderno Mágico')) 
             ->setTo($usuario[0]->getEmail()) 
             ->setBody($this->renderView('Emails/recuperar_conta.html.twig', array('username' => $usuario_selecionado->getUsername(), 'dados'=>$hash)), 'text/html'); 
        $mailer->send($message); 

そう、正しいと思われます。ユーザーの電子メールには、コマンドラインテストで使用したのと同じ電子メールがあります。そして、設定は、私は、コマンドラインかかわらず、それを送信する際に使われているものと同じであることをそこに想定される使用:

swiftmailer: 
transport: smtp 
host:  smtp.gmail.com 
username: yyyy 
password: ****** 
auth_mode: login 
port:  465 
encryption: ssl 
spool: { type: memory } 

swiftmailer.plugins.loggerplugin: 
class: 'Swift_Plugins_LoggerPlugin' 
arguments: ['@swiftmailer.plugins.loggerplugin.logger'] 
tags: [{ name: 'swiftmailer.default.plugin' }] 

swiftmailer.plugins.loggerplugin.logger: 
class: 'Swift_Plugins_Loggers_EchoLogger' 
arguments: [false] 

任意のログにはエラーはありませんが、真のメソッドの戻り値を「送信します」。それは単に動作しません。 (私はスプールの有無にかかわらず試しました。違いはありません)。電子メールは送信されません。

Iveはこの "EchoLogger"プラグインを設定し、コマンドラインで動作します。私はすべてのメッセージとエラーを出力で見ることができ、設定の設定と接続の問題の修正に役立ちました。しかし、そのdoestはサーバーによって実行されているときに何もしないようです、私は画面上または任意のログ内の任意のメッセージを表示することはできません。

アイブ氏も間違っている何かの可能性を排除するために、彼らは私のコマンドラインテストである正確なコードのすべての値を書いてみましず、まだ何も:

    $mailer = $this->get('mailer'); 
        $message = $mailer->createMessage() 
             ->setSubject('Test') 
             ->setFrom('yyyyy') 
             ->setTo('xxxxx') 
             ->setBody('test'); 
        $mailer->send($message); 

それでは、私ができます行う?何が間違っていますか?私はこれをデバッグする方法も知らない。コマンドラインで実行したときに動作し、Webサイト内で実行されたときにサイレントモードで失敗するのはなぜですか?コードがサーバー上で実行されているときに、EchoLoggerメッセージを表示する方法や場所はありますか?あなたがこれを使用する、メールを送信するようにコントローラを教えてくれなかったので、これはあるかもしれない

答えて

1

$this->get('mailer')->send($message); 
+0

しました。私はコードの一部を削除しました(編集された質問) –

1

[OK]を、アイブ氏は、私自身の解決策を見つけました。さて、回避策のように、実際に。

私はスプールの問題を抱えていたようです。何らかの理由でメッセージがスプールに送られて送信されませんでした。

   $mailer->send($message); 

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

       $spool->flushQueue($transport); 
  • を明示的に設定してスプールを無効にします:

    spool: 
    enabled: false  
    
  • 送信した後、力スプールフラッシュ権利を

    1. だから、アイブ氏は、IRの仕事を作るために2つの方法を見つけました

    メールは正常に送信されます

    関連する問題