2014-10-31 4 views
1

리디렉션 전에 SwiftMailer 사용과 관련하여 문제가 있습니다. 컨트롤러가 요청을 반환하도록 허용하면 이메일이 정상적으로 전송됩니다. 예 :리디렉션 전에 SwiftMailer 사용

function foo() { 

    // ... 

    $message = \Swift_Message::newInstance() 
     ->setSubject($subject) 
     ->setFrom($sender) 
     ->setTo($recipient) 
     ->setBody(strip_tags($html)) 
     ->addPart($html, 'text/html'); 
    $result = $this->app['mailer']->send($message); 

    return ''; 
} 

위의 내용은 null이 아닌 응답을 반환하는 한 작동합니다.

나도 같은 그러나이 같은 리디렉션과는 그러나 경우 : 다음 메시지가 전송되지 않습니다

function foo() { 

    // ... 

    $message = \Swift_Message::newInstance() 
     ->setSubject($subject) 
     ->setFrom($sender) 
     ->setTo($recipient) 
     ->setBody(strip_tags($html)) 
     ->addPart($html, 'text/html'); 
    $result = $this->app['mailer']->send($message); 

    simpleredirect($this->app['paths']['root']); 
} 

합니다.

참고 : 표준 연습과 마찬가지로 simpleredirect() 함수가 스크립트를 종료합니다.

두 예제 모두에서 $result이 지정된 수신자 수로 돌아옵니다. 따라서 나는 단지 메일이 대기 중이고 어떤 종류의 파견이 재방송이있을 때 빠져 나가는 재래식 반품으로 운영된다고 가정 할 수있다.

SwiftMailer spool 옵션이 활성화되었을 수 있습니다. 그러나 Bolt 프로젝트를 몇 번 검색하면 어디에도 설정할 수없는 것으로 보입니다. 스풀링을 사용하는 경우 리디렉션 (die은 피해야 함)과 같은 종료 단계가 끝날 때까지 전자 메일이 전송되지 않습니다.

+0

'simpleredirect '앞에'return'을 넣으십시오. –

답변

1

OK 나는 그것을 수행하는 방법을 발견했다.

Swiftmailer 제공자가 응답 가 전송 된 후 소성되어 KernelEvents::TERMINATE 이벤트를 이용하여 메일을 전송한다 : 여기서

는 이유이다. 그러나이 이벤트는 콘솔 명령으로 실행되지 않으므로 전자 메일이 보내지지 않습니다.

+0

공식적인 권장 방법은 콘솔 명령 (http://symfony.com/doc/3.2/console/command_in_controller.html)을 실행하는 것입니다. –

0

returnsimpleredirect 앞에 붙이십시오. 이것은 모든 컨트롤러 동작이 Response 개체를 반환해야하므로 필요합니다.

return ''의 경우 Symfony는 Response 개체를 만듭니다.

$app['swiftmailer.spooltransport']->getSpool()->flushQueue($app['swiftmailer.transport']); 

는 커널 인 이메일을 보내하게 리디렉션하기 전에이 줄을 추가하여 :

+0

'simpleredirect'에'die()'명령이 있기 때문에 작동하지 않습니다. – diggersworld

+0

그러면 질문에 언급해야합니다. 어쨌든'simpleredirect' 코드를 추가하면 도움이 될 것입니다. –

+0

리디렉션이 일반적으로 작동하는 방식이므로 꽤 분명하다고 생각했습니다. 그 후에는 출력이 필요 없으므로 대개 종료됩니다. – diggersworld