Napisałem niestandardowe polecenie konsoli, aby wysłać zapytanie do mojej bazy danych, wygenerować raport i wysłać wiadomość e-mail na adres; jednak nie mogę skutecznie wysłać e-maila. Mogę wysłać grzywnę e-mail z poziomu zwykłych kontrolerów w innym miejscu w mojej aplikacji, a także wysłać ją z poziomu mojej komendy konsoli, jeśli ręcznie utworzę i skonfiguruję instancję Swift_Mailer i nie otrzymam jej za pośrednictwem kontenera.Nie można wysłać wiadomości e-mail z poziomu niestandardowej komendy Symfony2, ale można to zrobić z dowolnego miejsca w aplikacji
Oto okrojona wersja polecenia mojego 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 przez SMTP w moim pliku app/config/config.yml
(delivery_address: [email protected]
również ustawić w app/config/config_dev.yml
):
swiftmailer:
transport: smtp
host: smtp.domain.com
username: username
password: password
spool:
type: memory
Kiedy uruchamiając polecenie, drukuje 1
do linii poleceń, co zakładam, że to się udało. Jednak monitoruję logi mojego serwera poczty w tym samym czasie, a nawet nie łączę się.
Aby potwierdzić, że moja konfiguracja był załadowany do programu pocztowego, zmieniłem szpulę z memory
do file
i wiadomości są buforowane do systemu plików przy uruchamianiu komendy i mogę skutecznie przepłukać szpulę w linii poleceń z php app/console swiftmailer:spool:send
.
Czy ktoś ma jakieś pomysły na temat tego, co się tutaj dzieje, lub jakiekolwiek sugestie, w jaki sposób mogę go dalej debugować? Nic nie pojawia się w moim pliku app/logs/dev.log
. Używam Symfony 2.1.3-DEV.
Ręczne spłukiwanie szpula tak wydaje się działać, Chyba 'kernel.terminate' ISN zdarzeń” t następnie uruchomione w ramach poleceń konsoli. Dzięki! – Kris
Inną opcją jest wyłączenie bufora z pliku konfiguracyjnego, możesz to zrobić tylko dla wiersza poleceń. Zrobiłem to jako tymczasowe rozwiązanie (tak, tak) i to działało dla mnie. – Jens
Jak zawsze świetna odpowiedź Elnur! :) – DonCallisto