【问题标题】:Laravel 4 sending mail after returning data from controllerLaravel 4从控制器返回数据后发送邮件
【发布时间】:2016-09-19 05:42:45
【问题描述】:

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

问题:有时邮件发送时间过长,发件人需要等待很长时间才能收到回复,或者有时甚至没有发送邮件(由于一些 smpt 问题等。 ) 并且它会触发一个错误,但是我并不关心是否发送了电子邮件,最重要的是该消息已保存到数据库中。

我想要达到的目标:

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

在向发送者发送响应之后,->

并且只有在运行 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']; 

【问题讨论】:

  • 究竟是什么问题?
  • 我想在返回响应后执行 Mail::send() ,或者做一些事情使 Mail::send() 不会影响响应和响应时间
  • 使用Mail::queue() 而不是Mail::send()。简单!

标签: php laravel-4


【解决方案1】:

你可以使用 Laravel 的邮件队列功能。这是Link

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

【讨论】:

    猜你喜欢
    • 2014-05-17
    • 2018-04-07
    • 2019-07-25
    • 2016-11-07
    • 2015-12-27
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多