【问题标题】:Mail notification when a new user is created in laravel在 laravel 中创建新用户时的邮件通知
【发布时间】:2018-06-08 07:49:41
【问题描述】:

我正在使用 Laravel 5.6。我的问题更多关于语法。在 User::create 之后,我写了这个: 注册控制器:

Mail::to($user->email)->cc($sponsor1->email)->bcc($sponsor2->email)->send(new NuevoVendedor($user));         return Redirect::to('login');

$sponsor1 和 $sponsor2,他们只是另一个用户,但我没有收到任何电子邮件。

导入的命名空间。

我的电子邮件服务正在运行,当我输入“忘记密码”时它运行良好。

我想,也许我没有触发电子邮件发件人的事件 (?)

当我的控制器没有关联到 get:route 视图或者它们没有向 laravel 获取错误时,如何查看控制器中的错误? (例如在调度中)。有什么方法可以在控制台中查看 var_dump、dd() 或其他内容?

这是我完整的 registerController:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Illuminate\Support\Facades\Log;
use App\Mail\NuevoVendedor;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Mail;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use App\Notifications\UserRegisteredSuccessfully;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'type' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6',

        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    { 
        return $user =User::create([
            //general
            'type' => $data['type'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),

            'remember_token'=>$data['_token'],
            'phone_number'=>$data['phone_number'] , 
            'how' =>$data['how'], 
            'state' =>$data['state'], 
            'city' =>$data['city'], 
            'address' =>$data['address'], 
            //usuarios normales 
            'first_name'=> isset($data['first_name']) ? $data['first_name']:null, 
            'last_name'=>isset($data['last_name']) ? $data['last_name']:null , 
            'sponsor'=> isset($data['sponsor']) ? $data['sponsor']:null, 
            //providers
            'commercial_name'=>isset($data['commercial_name']) ? $data['commercial_name']:null,
            'rut'=>isset($data['rut']) ? $data['rut']:null,
            'agcw_sponsor'=>isset($data['agcw_sponsor']) ? $data['agcw_sponsor']:null,

        ]);

        $data["sponsor"] = $sponsorID;

        Log::info($sponsorID);

        $sponsor1=DB::table("users")->select("email","id","sponsor")->where("id","=",$sponsorID)->first();

        $sponsor2id=$sponsor1->sponsor;
        $sponsor2=DB::table("users")->select("email")->where("id","=",$sponsor2id)->first();

        $sponsorEmail=$sponsor1->email;
        $sponsor2Email=$sponsor2query->email;

        Mail::to($data["email"], $sponsorEmail, $sponsor2Email)->send(new NuevoVendedor($user));

        return Redirect::to('login');


    }

}

【问题讨论】:

    标签: php laravel laravel-5.6


    【解决方案1】:

    laravel 的文档有时还不够,所以通常我会查看laravel's source code 以了解它是如何实现的。

    查看MailerPendingMail类的源码:

    您可以注意到变量$cc 是一个数组,函数to()cc()bcc() 接收一个混合变量,后来设置为$to$cc、@987654330 @数组变量。

    Wich 意味着您的方法应该传递一个电子邮件数组而不是电子邮件字符串。

    所以如果你添加括号包裹电子邮件应该没问题,像这样:

    Mail::to([$user->email])
          ->cc([$sponsor1->email])
          ->bcc([$sponsor2->email])
          ->send(new NuevoVendedor($user));
    
    return Redirect::to('login');
    

    我还注意到,赞助商2 可能应该与赞助商1 在cc() 方法,所以现在你可以这样做:

    Mail::to([$user->email])
          ->cc([$sponsor1->email, $sponsor2->email])
          ->send(new NuevoVendedor($user));
    
    return Redirect::to('login');
    

    或者你甚至可以多清除一点:

    Mail::to([$user->email, $sponsor1->email, $sponsor2->email])
          ->send(new NuevoVendedor($user));
    
    return Redirect::to('login');
    

    这应该可以,如果效果好,请告诉我。

    【讨论】:

    • 如果仍然没有检查你在 storage/logs/laravel.log 中的日志文件
    • @AmitKumar 使用 Facede 'Log' 将消息写入日志文件。喜欢:Log::info($message);。不要忘记导入 Log 类'use \Log';
    • 还要检查日志,只需使用命令 tail 跟随 laravel.log:tail -f storage/logs/laravel.log
    • 不工作,我在 laravel 日志中也看不到任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 2021-11-05
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多