Laravel 4从控制器返回数据后发送邮件

时间:2016-05-22 09:05:47

标签: php laravel-4

我的控制器中有一个函数可以保存来自用户的消息,首先它将消息保存到数据库中,而不是将电子邮件发送到该用户的邮件地址,而不是将json响应发送给发件人。

问题:有时发送电子邮件需要很长时间,发件人必须等待很长时间才能收到回复,有时甚至不会发送电子邮件(由于某些问题等等)并且它会触发错误,但是如果发送或不发送电子邮件,我真的不在乎,最重要的是将消息保存到数据库中。

我想要实现的目标:

我想将消息保存到数据库,>

之后立即向发件人发送回复, - >

并且仅在运行Mail :: send();

之后

所以在控制器将json返回给发件人之后运行Mail :: send(),因此无论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']; 

1 个答案:

答案 0 :(得分:1)

您可以使用Laravel的邮件排队功能。这是Link

  1. Mail :: queue(' emails.welcome',$ data,function($ message){});
    用于后台发送的队列邮件。
  2. Mail :: later(5,' emails.welcome',$ data,function($ message){});
    定义发送邮件的秒数。