Nie można wysłać wiadomości e-mail z poziomu niestandardowego polecenia Symfony2, ale można z innego miejsca w aplikacji
Napisałem niestandardowe polecenie konsoli, aby wysłać zapytanie do mojej bazy danych, wygenerować raport i wysłać go pocztą elektroniczną na adres; jednak nie mogę z powodzeniem wysłać e-maila. Mogę wysyłać wiadomości e-mail z normalnych kontrolerów w innych miejscach mojej aplikacji, a także mogę wysyłać je z poziomu komendy konsoli, jeśli ręcznie utworzę i skonfiguruję instancję Swift_Mailer i nie otrzymam jej przez kontener.
Oto uproszczona wersja mojej komendy konsoli:
<?php
namespace Foo\ReportBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class ExpiryCommand extends ContainerAwareCommand
{
protected function configure()
{
$this->setName('report:expiry')
->setDescription('Compile and send e-mail listing imminent expiries');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
/* ... */
$message = \Swift_Message::newInstance()
->setSubject('Expiry report')
->setFrom('[email protected]')
->setTo('[email protected]')
->setBody($body);
$mailer = $this->getContainer()->get('mailer');
/* This works...
$transport = \Swift_SmtpTransport::newInstance('smtp.domain.com', 25)
->setUsername('username')
->setPassword('password');
$mailer = \Swift_Mailer::newInstance($transport);
*/
$result = $mailer->send($message);
$output->writeln($result);
}
}
Swiftmailer jest skonfigurowany do wysyłania za pośrednictwem SMTP w moimapp/config/config.yml
plik (delivery_address: [email protected]
jest również ustawionyapp/config/config_dev.yml
):
swiftmailer:
transport: smtp
host: smtp.domain.com
username: username
password: password
spool:
type: memory
Po uruchomieniu polecenia jest drukowane1
do linii poleceń, co, jak sądzę, oznacza, że się powiodło. Jednak monitoruję dzienniki mojego serwera pocztowego w tym samym czasie i nawet się nie łączy.
Aby potwierdzić, że moja konfiguracja została załadowana do programu pocztowego, zmieniłem buformemory
dofile
a komunikaty są buforowane do systemu plików podczas uruchamiania polecenia i mogę z powodzeniem opróżnić bufor w wierszu poleceń za pomocąphp app/console swiftmailer:spool:send
.
Czy ktoś ma jakieś pomysły co do tego, co się tutaj dzieje, lub jakieś sugestie, w jaki sposób mogę go dalej debugować? Nic nie pojawia się w moimapp/logs/dev.log
plik. Używam Symfony 2.1.3-DEV.