Laravel随笔 发送邮件的几种方式

  1. 利用observer进行监控created并发送邮件
  • 创建observer文件
  • 在app/Providers/AppServiceProvider.php中进行注册
  public function boot()
    {
        User::observe(UserObserver::class);
    }
  • 在observer中创建created方法并写入邮件发送
    public function created(Admin $admin)
    {
    	// 因为是created,系统默认的注册方法中会自动create后登陆,所以可以利用auth('admin')->user()获取登陆对象
        $user = auth('admin')->user();
        $admin->notify(new EmailNotify($user));
    }
  • 创建EmailNotify邮件模板并修改
  1. 利用event事件来监控并发送邮件
  • 生成listener事件监听文件
  • 将listener事件监听文件与事件进行绑定
 	protected $listen = [
    	// Registered::class就是一个默认的注册事件
    	// Registered因为是ed所以是在注册完成之后执行
        Registered::class => [
        	// SendRegisterMailListener::class事件监听器,负责具体的事件操作
        	// 绑了两个监听器,符合一对多的关系
            SendRegisterMailListener::class,
            SendEmailVerificationNotification::class,
        ],
    ];
  • 生成notify邮件模板并在监听文件中写入邮件发送功能
   public function handle(Registered $event)
    {
        $user = $event->user;
        $email_token = \Str::random(5);
        $user->mail_token = $email_token;
        $user->save();
        // 发送验证邮件
        $user->notify(new EmailNotify($user));
    }
  1. 不使用notify,自己创建模板,普通发送邮件方法
  • 生成mail文件
artisan make:mail RegMail
  • 编辑文件内容
	// 生成邮件内容
class RegMail extends Mailable
{
    use Queueable, SerializesModels;

	// 设置一个公共变量
    public $user;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($user)
    {
        $this->user = $user;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
    	// 不需要传值,会自动向view返回公共变量
        return $this->view('mail.reg');
    }
}
  • 发送邮件
	// 找到需要发送的数据
    $user = User::find(2);
    // to方法为发送邮件,会自动获取email字段
    // send(new RegMail())调用RegMail的Build方法生成邮件内容
    \Mail::to($user)->send(new RegMail());
发布了68 篇原创文章 · 获赞 0 · 访问量 1723

猜你喜欢

转载自blog.csdn.net/qj4865/article/details/104849021