2015-01-06 1 views
5

모든 전자 메일을 보내기 전에 Laravel의 "이벤트"클래스를 사용하여 코드를 실행하는 방법이 있습니까? Mail::send();을 취소 할 수도 있습니다. 나는이 작업을 수행 할 수 물론Laravel Mail Listener (보내기 전에 취소 할 수 있음)

나는 이메일 보내기 전에 :

Event::fire('email.beforeSend'); 

을 그리고 나는이 방법을들을 수 있습니다 :

Event::listen('email.beforeSend', function() 
{ 
    //my code here 
}); 
이 가진 문제는 내가 실행을 기억해야한다는 것입니다

Event::fire() 나는 오히려하지 않을 것이다. 내 경우에는 수신 거부 목록에 대한 전자 메일 주소를 수신 거부하여 스팸 메일을 보내지 않도록합니다.

답변

4

Laravel의 Mail 클래스는 전송 프로세스의 일부로 mailer.sending을 시작합니다.

protected function sendSwiftMessage($message) 
{ 
    if ($this->events) 
    { 
     $this->events->fire('mailer.sending', array($message)); 
    } 

    if (! $this->pretending) 
    { 
     $this->swift->send($message, $this->failedRecipients); 
    } 
    elseif (isset($this->logger)) 
    { 
     $this->logMessage($message); 
    } 
} 

는이 이벤트를 캐치하고 $message 개체를 조정하거나 이벤트 핸들러 내 Mail::pretend();를 호출하여 전송 방지 가능성이 수 있었다.

+0

흥미 롭습니다. 그래서 내 리스너는'Event :: listen ('mailer.sending', function() {}); 'Mail :: pretend();에 익숙하지 않아서''pretend '=> false''와 같은 일을한다. 나는 이것을 망쳐 놓고 너에게 돌아갈거야. – sterfry68

+0

'Mail :: pretend();는 다른 이메일을 보내겠다고 "하겠지만 현재 이메일을 취소하지는 않을 것이라고 생각합니다. 내가 맞습니까? http://laravel.com/docs/4.2/mail#mail-and-local-development – sterfry68

+0

"척"모드를 켭니다. 'sendSwiftMessage'의 다음 줄은 그 모드를 검사하고 send를 건너 뜁니다. – ceejayoz

관련 문제