Как отправить спул из swiftmailer без использования команды

Как отправить спул из swiftmailer без использования команды?

php app/console swiftmailer:spool:send --env=prod

Мне нужно как-то поместить это в php-файл, чтобы администратор сервера мог добавить это в расписание.

2 ответа

Решение

Просто сделайте то же самое, что и команда. Из команды 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). Кроме того, этот код ищет два типа катушек, возможно, вам не нужен весь код, если ваша катушка не относится к этим видам.

Это также может быть достигнуто с помощью Как я могу запустить команду запуска symfony 2 из контроллера, чтобы вы не дублировали код. Работал на меня.

services.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());
Другие вопросы по тегам