2017-01-18 2 views
1

Ive недавно перенес этот веб-сайт (сделанный с 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 пытался с и без катушки: никакой разницы). Не отправляется электронное письмо.

Ive установил этот плагин «EchoLogger», и он работает в командной строке. Я вижу все сообщения и ошибки на выходе, что помогло мне настроить конфигурацию и устранить проблемы с подключением. Но, похоже, что ничего не делает, когда выполняется на сервере, я не вижу никаких сообщений на экране или в любых журналах.

Ive даже пытался писать все значения в коде так же, как они находятся на моей командной строки теста, чтобы исключить возможность что-то не ошибиться там, и до сих пор ничего:

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

Так что я могу делать? Что может быть неправильным? Я даже не знаю, как отладить это. Почему он работает при запуске в командной строке и не работает при запуске внутри веб-сайта? Есть ли способ или любое место, чтобы увидеть эти сообщения EchoLogger, когда код запускается на сервере?

ответ

1

Это может быть потому, что вы не сказали контроллер для отправки почты, используйте это:

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

Я сделал. Я забыл эту часть кода (отредактированный вопрос) –

1

Хорошо, Ive нашел свое собственное решение. Ну, больше похоже на обходной путь.

Кажется, что у меня была проблема с катушкой: сообщения направлялись в катушку, а потом почему-то не отправлялись.

Так Ive нашел 2 способа сделать ИК работы:

  1. сила катушку вровень сразу после отправки:

       $mailer->send($message); 
    
           $spool = $mailer->getTransport()->getSpool(); 
           $transport = $this->get('swiftmailer.transport.real'); 
    
           $spool->flushQueue($transport); 
    
  2. явно отключить катушку в конфигурации:

    spool: 
    enabled: false  
    

В обоих случаях способы, электронные письма отправляются нормально