2015-01-06 18 views
5

Có cách nào để sử dụng lớp "Sự kiện" của Laravel để chạy một số mã trước khi mọi email được gửi không? Tôi cũng muốn có khả năng hủy bỏ Mail::send();.Trình nghe thư Laravel (Trước khi gửi - Khả năng hủy)

Dĩ nhiên tôi có thể làm được điều này trước khi tôi gửi một email:

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

Và sau đó tôi có thể lắng nghe theo cách này:

Event::listen('email.beforeSend', function() 
{ 
    //my code here 
}); 

Vấn đề ở đây là tôi phải nhớ để chạy Event::fire() mà tôi không muốn làm. Trong trường hợp của tôi, tôi đang gửi địa chỉ email chống lại danh sách hủy đăng ký để đảm bảo rằng tôi không gửi bất kỳ spam nào.

Trả lời

4

Lớp thư của Laravel kích hoạt mailer.sending như một phần của quá trình gửi.

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); 
    } 
} 

Bạn có thể bắt sự kiện này và điều chỉnh các đối tượng $message, hoặc bạn có thể có thể ngăn chặn việc gửi bằng cách gọi Mail::pretend(); trong xử lý sự kiện của bạn.

+0

Thú vị. Vì vậy, người nghe của tôi sẽ trông giống như 'Event :: listen ('mailer.sending', function() {});'? Không quen thuộc với 'Mail :: giả vờ();' Tôi đoán điều này cũng giống như 'giả vờ' => false' trong cấu hình. Tôi sẽ lộn xộn với điều này và lấy lại cho bạn. – sterfry68

+0

Tôi nghĩ rằng 'Mail :: giả vờ(); 'sẽ" giả vờ "để gửi một email khác nhưng sẽ không hủy email hiện tại. Tôi có đúng không? http://laravel.com/docs/4.2/mail#mail-and-local-development – sterfry68

+0

Nó sẽ bật chế độ "giả vờ". Các dòng tiếp theo trong kiểm tra 'sendSwiftMessage' cho chế độ đó và bỏ qua việc gửi. – ceejayoz

Các vấn đề liên quan