如何在不使用命令的情况下从 swiftmailer 发送假脱机?
php app/console swiftmailer:spool:send --env=prod
我需要以某种方式将其放入 php 文件中,以便服务器管理员可以将其添加到 Schedule.xml 中。
如何在不使用命令的情况下从 swiftmailer 发送假脱机?
php app/console swiftmailer:spool:send --env=prod
我需要以某种方式将其放入 php 文件中,以便服务器管理员可以将其添加到 Schedule.xml 中。
这也可以通过How can I run symfony 2 run command from controller来实现,这样您就不会重复代码。为我工作。
服务.yml:
services:
swiftmailer.command.spool_send:
class: Symfony\Bundle\SwiftmailerBundle\Command\SendEmailCommand
calls:
- [ setContainer, ["@service_container"] ]
控制器代码(简化):
$this->get('swiftmailer.command.spool_send')->run(new ArgvInput(array()), new ConsoleOutput());
只需执行与命令相同的操作即可。从命令 Execute() 函数:
$mailer = $this->getContainer()->get('mailer');
$transport = $mailer->getTransport();
if ($transport instanceof \Swift_Transport_SpoolTransport) {
$spool = $transport->getSpool();
if ($spool instanceof \Swift_ConfigurableSpool) {
$spool->setMessageLimit($input->getOption('message-limit'));
$spool->setTimeLimit($input->getOption('time-limit'));
}
if ($spool instanceof \Swift_FileSpool) {
if (null !== $input->getOption('recover-timeout')) {
$spool->recover($input->getOption('recover-timeout'));
} else {
$spool->recover();
}
}
$sent = $spool->flushQueue($this->getContainer()->get('swiftmailer.transport.real'));
$output->writeln(sprintf('sent %s emails', $sent));
}
您需要删除 $output->... 行(也许您可以对 $sent 变量做一些有用的事情)。此外,此代码查找两种线轴,如果您的线轴不是其中一种,您可能不需要所有代码。