Symfony 2: Swiftmailer не отправляет, ошибок нет

Я недавно перенес этот веб-сайт (созданный с Symfony 2) на новый сервер, и мы решили использовать Службы Google для отправки электронных писем.

После некоторых проблем с подключением 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]

В любом журнале ошибок нет, а метод send возвращает true. Это просто не работает. (Я пробовал с и без катушки: без разницы). Электронное письмо не отправлено.

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

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

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

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

2

Решение

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

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

Итак, я нашел 2 способа заставить их работать:

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

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

    spool:
    enabled: false
    

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

2

Другие решения

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector