파일 유형을 사용하여 전자 메일을 스풀링하도록 swiftmailer를 구성했습니다. 여기 Symfony - kernel.terminate에서 console 명령을 실행하십시오.
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool:
type: file
path: "%kernel.root_dir%/../var/spool"
내가 어떤 이메일이 완벽하게 스풀을 보내 내 swiftmailer의 설정
입니다. 그 후 이메일을 보내려면 다음 명령을 실행하십시오. 심포니 documentation 내 문제가 크론이 내가 감당할 수없는 1 분 간격의 최소 구성 할 수 있기 때문에, 내가 crontab을 사용할 수 없습니다입니다the console command should be triggered by a cron job or scheduled task and run at a regular interval.
에 따르면
bin/console swiftmailer:spool:send --env=dev
. 응답이 브라우저로 다시 전송 된 후 즉각적인 실행으로 백그라운드 프로세스를 사용하여 최소의 스풀 실행을 최소화하고자합니다.
이벤트 리스너 클래스를 만들고 kernel.terminate
을 청취하여이 문제를 해결하려고 시도했으며 shell_exec
또는 exec
함수를 사용하여 명령을 실행했습니다. 여기에 참조 용 코드가 있습니다.
app.kernel.terminate.listener:
arguments: ["@kernel"]
class: AppBundle\EventListener\KernelTerminateListener
tags:
- { name: kernel.event_listener, event: kernel.terminate }
여기 내의 EventListener 클래스
내가 여기에 노력하고하는 것은kernel.terminate
이벤트에
bin/console swiftmailer:spool:send --env=dev
를 실행하는 것입니다
<?php
namespace AppBundle\EventListener;
use Symfony\Component\HttpKernel\Event\PostResponseEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Cocur\BackgroundProcess\BackgroundProcess;
class KernelTerminateListener
{
protected $kernel;
protected $console;
public function __construct($kernel)
{
$this->kernel = $kernel;
$this->console = $this->kernel->getRootDir().'/../bin/console ';
}
public function onKernelTerminate(PostResponseEvent $event)
{
$command = $this->console.'swiftmailer:spool:send --env='.$this->kernel->getEnvironment();
shell_exec($command);
}
}
, 불행하게도이 작동하지 않습니다,이 문제가 감사에 접근하는 방법에 대한 힌트입니다.
감사합니다.
이것은 '작동하지 않음'을 의미합니까? – COil
전자 메일을 발송하지 않는 반면,'$ command'를 echo하고 복사하여 터미널에 붙여 넣으면 작동합니다. 나는 그것이 실행 되더라도 스풀 파일은 처리되지 않는다는 것을 알 수있다. 보통 스풀 파일은 처리되면 삭제되고, 내 경우에는 삭제되지 않는다. –
'shell_exec ($ command);'의 결과는 옳은 문제일까요? – COil