Я пытаюсь отправить электронные письма в пользовательскую команду с буферизацией памяти. Согласно сдаточной документации здесь:Symfony 2.7.3 и Swiftmailer 5.4.1 не работают в командах: почему они используют NullTransport
http://symfony.com/doc/2.7/cookbook/console/sending_emails.html
Это происходит автоматически, так как Symfony 2.3/Swiftmailer 2.3.5, но он не работает.
Я попробовал стандартный способ
$email = \Swift_Message::newInstance()
->setSubject('New Email')
->setFrom('[email protected]')
->setTo($recipients)
->setBody($message);
$container = $this->getContainer();
$container->get('mailer')->send($email);
Ничто не отправлено.
Я также попытался вручную очистить катушку, которая была обходной путь в более ранних версиях, добавив это в конце команды
$spool = $container->get('mailer')->getTransport()->getSpool();
$transport = $container->get('swiftmailer.transport.real');
$spool->flushQueue($transport);
Это тоже не сделал ничего.
Письма отправляются с моих контроллеров, поэтому я знаю, что swiftmailer настроен правильно.
Я не хочу переключаться на буферизацию файлов, но похоже, что это единственный вариант на данный момент.
редактировать: При использовании подкачки памяти, flushQueue вызывается из поставщика/SwiftMailer/SwiftMailer/Библиотека/классы/Swift/MemorySpool.php
Я редактировал эту функцию var_dump переменного $ транспорта, который он использует, и он решил использовать нулевой транспортные Swift_Transport_NullTransport, который следует использовать только тогда, когда disable_delivery установлен на конфигурации (или если транспорт установлен в нуль в конфигурации)
Я думаю, что это является причиной неудавшегося сообщения электронной почты, так мой новый вопрос: зачем нужны команды с помощью NullTransport?
редактировать 2: Проблема, как представляется, исходя из этой линии
$spool->flushQueue($this->container->get(sprintf('swiftmailer.mailer.%s.transport.real', $name)));
в SwiftMailer-расслоением/EventListener/EmailSenderListener.php
У меня есть только одна настройка почтовой программы в моей конфигурации
swiftmailer:
transport: %mailer_transport%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
spool: { type: memory }
port: %mailer_port%
encryption: %mailer_encryption%
sender_address: %mailer_sender_address%
, который вытягивает значения из paramters.yml
mailer_transport: sendmail
mailer_host: smtp.sendgrid.net
mailer_user: [USERNAME]
mailer_password: [PASSWORD]
mailer_port: 465
mailer_encryption: ssl
mailer_sender_address: [email protected]
но по какой-либо причине транспорт, который возвращается для «swiftmailer.mailer.default.transport.real», является нулевым транспортом.