データベースにクエリを実行し、レポートを作成してアドレスに電子メールで送信するカスタムコンソールコマンドを作成しました。しかし、メールをうまく送信できないようです。アプリケーション内の他の場所にある通常のコントローラー内から電子メールを正常に送信できます。また、Swift_Mailerインスタンスを手動で作成および構成し、コンテナー経由で取得しない場合は、コンソールコマンド内から電子メールを送信することもできます。
これが私のコンソールコマンドの簡略版です:
<?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('DoNotReply@domain.com')
->setTo('recipient@domain.com')
->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は、app/config/config.yml
ファイル内でSMTP経由で送信するように構成されています(delivery_address: dev@domain.com
で設定されていますapp/config/config_dev.yml
)。
swiftmailer:
transport: smtp
host: smtp.domain.com
username: username
password: password
spool:
type: memory
コマンドを実行する1
と、コマンドラインに出力されます。これは、コマンドが成功したことを意味していると思います。ただし、メールサーバーのログを同時に監視していて、接続すらしていません。
構成がメーラーにロードされていることを確認するために、スプールをからに変更しmemory
、file
コマンドの実行時にメッセージがファイルシステムにスプールされ、コマンドラインで。を使用してスプールを正常にフラッシュできphp app/console swiftmailer:spool:send
ます。
ここで何が起こっているのか、またはそれをさらにデバッグする方法についての提案はありますか?ファイルに何も表示されていませんapp/logs/dev.log
。私はSymfony2.1.3-DEVを使用しています。