2016-04-13 4 views
1

Я пытаюсь отправить электронную почту с помощью задач хрон с Symfony, поэтому мой вопрос, как бы я выполнить мою команду с помощью SwiftMailer в моем выполнении функции? Заранее спасибоотправки сообщений электронной почты из задач хрон в Symfony

Я хочу SwiftMailer быть в моем методе выполнения, так что я могу отправить электронную почту на основе хрон задач

    $mail = \Swift_Message::newInstance(); 
        $mail->setFrom('[email protected]') 
         ->setTo('[email protected]') 
         ->setSubject('Email subject') 
         ->setBody('email body, can be swift template') 

        $this->get('mailer')->send($mail); 

мой CronTasksRunCommand

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    $output->writeln('<comment>Running Cron Tasks...</comment>'); 

    $this->output = $output; 
    $em = $this->getContainer()->get('doctrine.orm.entity_manager'); 
    $crontasks = $em->getRepository('AppBundle:CronTask')->findAll(); 

    foreach ($crontasks as $crontask) { 
     // Get the last run time of this task, and calculate when it should run next 
     $lastrun = $crontask->getLastRun() ? $crontask->getLastRun()->format('U') : 0; 
     $nextrun = $lastrun + $crontask->getInterval(); 

     // We must run this task if: 
     // * time() is larger or equal to $nextrun 
     $run = (time() >= $nextrun); 

     if ($run) { 
      $output->writeln(sprintf('Running Cron Task <info>%s</info>', $crontask)); 

      // Set $lastrun for this crontask 
      $crontask->setLastRun(new \DateTime()); 

      try { 
       $commands = $crontask->getCommands(); 
       foreach ($commands as $command) { 
        $output->writeln(sprintf('Executing command <comment>%s</comment>...', $command)); 

        // Run the command 
        $this->runCommand($command); 
       } 

       $output->writeln('<info>SUCCESS</info>'); 
      } catch (\Exception $e) { 
       $output->writeln('<error>ERROR</error>'); 
      } 

      // Persist crontask 
      $em->persist($crontask); 
     } else { 
      $output->writeln(sprintf('Skipping Cron Task <info>%s</info>', $crontask)); 
     } 
    } 

    // Flush database changes 
    $em->flush(); 

    $output->writeln('<comment>Done!</comment>'); 
} 

ответ

2

Если ваш класс Command расширяет ContainerAware Command класс, то просто замените

$this->get('mailer')->send($mail); 

с

$this->getContainer()->get('mailer')->send($mail);