美文网首页
如何在 make:auth 之后用 QQ 邮箱发送自定义密码重置

如何在 make:auth 之后用 QQ 邮箱发送自定义密码重置

作者: 晨曦入诗 | 来源:发表于2018-10-09 19:33 被阅读19次

    生成授权码


    使用 Laravel 发送 QQ邮件使用的不是 QQ邮箱号和密码,而是 QQ邮箱号和授权码(QQ 推出的用于登录第三方客户端的专用密码)。生成授权码的步骤如下:

    进入 QQ 邮箱网页版 → 设置 → 账户 → (开启)POP3/SMTP 服务 → (点击)生成授权码。

    需要注意的是授权码一定要妥善保存,避免因为泄露带来的不必要麻烦。

    配置 .env

    APP_URL=http://homestead.app
    
    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.qq.com
    MAIL_PORT=25
    MAIL_USERNAME=邮箱号
    MAIL_PASSWORD=授权码
    MAIL_ENCRYPTION=ssl
    MAIL_FROM_ADDRESS=${MAIL_USERENAME}
    MAIL_FROM_NAME=测试邮件
    

    将 「邮箱号」、「授权码」换成你的就可以了。

    创建邮件

    php artisan make:mail ResetPassword --markdown
    

    修改 ResetPassword.php

    <?php
    
    namspace App\Mail;
    
    use App\User;
    use Illuminate\Bus\Queueable;
    use Illuminate\Mail\Mailable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Contracts\Queue\ShouldQueue;
    
    class ResetPassword extends Mailable
    {
        use Queueable, SerializesModels;
    
        public $token;
        public $username;
        /**
         * Create a new message instance.
         *
         * @return void
         */
         public function __construct($token, $username)
         {
             $this->token = $token;
             $this->username = $username;
         }
    
         /**
         * Build the message.
         *
         * @return $this
         */
         public function build()
         {
                return $this->subject('密码重置')
                            ->markdown('emails.reset_password');
         }
    }
    

    邮件内容在 views/emails/reset_password.blade.php 现在创建它:

    @component('mail::message')
    # 密码重置
    
    你好,{{ $username }} !点击下面的链接重置密码。
    @component('mail.botten', ['url' => url(config('app.url').route('password.reset', $token, false))])
    重置密码
    @endcomponent
    
    如果非本人操作,请忽略这封邮件。
    
    你的,<br>
    {{ config('app.name') }}
    @endcomponent
    

    重写发送密码重置邮件的方法

    Laravel 内置有发送邮件功能,最终发送邮件的方法是调用 Illuminate\Auth\Passwords\CanResetPassword 这个 trait 的 sendPasswordResetNotification 方法。

    /**
     * Send the password reset notification.
     *
     * @param  string  $token
     * @return void
     */
    public function senPasswordResetNotification($token)
    {
         $this->notify(new ResetPassword($token));
    }
    

    User Model 使用了这个 trait ,所以在 Model 中重写 sendPasswordResetNotification 方法就可以将密码重置邮件更改为刚才自定义的。
    下面为 User Model 添加方法 sendPasswordResetNotification

    use Mail;
    use App\Mail\ResetPassword;
    
    public function sendPasswordResetNotification($token)
    {
         Mail::to($this->email)->send(new ResetPassword($token, $this->name));
    }
    

    相关文章

      网友评论

          本文标题:如何在 make:auth 之后用 QQ 邮箱发送自定义密码重置

          本文链接:https://www.haomeiwen.com/subject/eswjaftx.html