2016-05-22 118 views
0

我的控制器中有一個保存用戶消息的函數,首先它將消息保存到數據庫中,而不是將消息發送到該用戶的郵件地址,而不是將json響應返回給發件人。Laravel 4在從控制器返回數據後發送郵件

問題:有時它的時間太長要發送郵件,並且發件人必須等待很長一段時間的反應,或有時電子郵件甚至沒有派(由於一些SMPT問題等),它觸發一個錯誤,但是如果發送電子郵件或者不發送郵件,那麼最重要的是這條消息被保存到數據庫。

我想要實現:

我想消息保存到數據庫中, - >

後立即發送響應給發件人 - >

,只有運行後郵件發送::();

這樣運行的Mail :: send()方法控制器返回JSON給發件人後,讓發件人會收到積極響應,無論怎樣的Mail :: send()方法執行

$message = new MessageDB; 
    $message->listing_id = e(Input::get('listing_id')); 
    $message->user_id = $listing->User->id; 
    $message->name = e(Input::get('name')); 
    $message->mobile = e(Input::get('mobile')); 
    $message->message = e(Input::get('message')); 
    if ($message->save()) { 

     Mail::send('emails.message', ['user' => 'Jon Doe','message' => $message], function($m) use($listing){ 
      $listing_agent = $listing->Agent; 
      if ($listing->agent == null) { 
       $mail_to = $listing->User->email; 
       $name = ''; 
      }else{ 
       $mail_to = $listing->Agent->email; 
       $name = $listing->Agent->first_name.' '.$listing->Agent->second_name; 
      } 
      $m->to($mail_to)->subject('new message from company.com'); 

     }); 

     return ['success' => 1, 'message' => 'messasge has been sent']; 
+0

確切的問題是什麼? –

+0

我想在返回響應之後執行Mail :: send(),或者做一些事情讓Mail :: send()不會影響響應和響應時間。 – Mikail

+0

使用'Mail :: queue()'代替Mail :: send()'。簡單! – prateekkathal

回答

1

您可以使用郵件隊列Laravel的功能。這裏的Link

  1. Mail :: queue('emails.welcome',$ data,function($ message){});
    將隊列郵件發送給後臺發送。 (5,'emails.welcome',$ data,function($ message){});
    定義秒數後將發送郵件。
+0

謝謝你;)--- – Mikail