[Day 28] 建立注册的画面及功能(十二) - 寄出注册通知信

寄送会员通知信

Laravel基于SwiftMailer函式库开发了一套邮件套件,
可以支援多种服务,
在我们使用邮件功能之前,
要先安装Guzzle HTTP函式库.
(PHP必须在7.1.3以上)

composer require guzzlehttp/guzzle
http://img2.58codes.com/2024/20105694WJqLH90AVf.png

邮件相关设定

邮件的设定放在config/mail.php档案中,我们使用Gmail SMTP来当作测试用的邮件服务,在.env的邮件设定如下

MAIL_DRIVER=smtpMAIL_HOST=smtp.gmail.comMAIL_PORT=587MAIL_USERNAME=henrychang0202@gmail.comMAIL_PASSWORD= (密码)MAIL_ENCRYPTION=tls

如果要使用其他邮件服务,
除了设定config/mail.php档案,
服务相关的验证资料都放在config/services.php档案中,
必须要设定完后才可以正常使用,
在设定完Gmail SMTP相关设定后,
就可以开始测试寄送邮件了.

寄送会员通知信

原本正式的流程,
还要经过认证的过程,
不过我们在这里就直接省略,
直接寄E-mail通知就解决了.
我们可以使用Mail:send()的函式寄送邮件,
相关的程式如下:

必须要use Mail; //寄信 否则会出现错误 Class 'App\Http\Controllers\Mail' not found

app/Http/Controllers/UserAuthController.php

<?PHPnamespace App\Http\Controllers;use App\Http\Controllers\Controller;use Validator; //验证器use Hash; //杂凑use Mail; //寄信use App\Shop\Entity\User; //使用者 Eloquent ORM Modelclass UserAuthController extends Controller{    //处理注册资料    public function signUpProcess()    {        //省略        User::create($input);        //寄送注册通知信        $mail_binding = [            'name' => $input['name']        ];        Mail::send('email.signUpEmailNotification', $mail_binding,        function($mail) use ($input){            //收件人            $mail->to($input['email']);            //寄件人            $mail->from('henrychang0202@gmail.com');            //邮件主旨            $mail->subject('恭喜注册Laravel部落格成功!');        });        //重新导向到登入页        return redirect('/user/auth/sign-in');    }}?>

在Mail::send()的第一个参数是寄送邮件药使用的邮件模板,
模板位置一样是放在resources/views目录下,
上面的範例则是使用resources/views/email/signUpEmailNotification.blade.php模板档案,
模板档案只显示使用者暱称,
并加入注册成功的相关字样而已.

第二个参数,
代表要传入到模板的变数资料,
在模板中我们有用name变数去显示使用者的暱称,
所以在模板变数资料,
需要将name资料传给模板.

resources/views/email/signUpEmailNotification.blade.php

<h1> 恭喜 {{ $name }} Laravel部落格 注册成功</h1>

第三个参数,为设定E-mail寄送的相关寄件人及收件人相关设定,像是寄件人、收件人及邮件主旨,当设定完成后就可以测试传送表单资料,看看是否有正确的收到寄送的注册通知信了!

执行 http://localhost:6943/user/auth/sign-up ,送出表单之后收邮件
http://img2.58codes.com/2024/20105694wnLo6O0NWb.png

可以成功发送邮件了.

补充:目前app/Http/UserAuthController.php的完整程式码

<?PHPnamespace App\Http\Controllers;use Mail;use Hash;use Validator;use App\Http\Controllers\Controller;use App\Module\ShareData;use App\Entity\User;class UserAuthController extends Controller{    //使用者注册画面    public function signUpPage()    {        $name = 'sign_up';        $binding = [            'title' => ShareData::TITLE,            'name' => $name,        ];        return view('user.sign-up', $binding);    }    //处理注册资料    public function signUpProcess()    {        //接收输入资料        $input = request()->all();        //验证规则        $rules = [            //暱称            'name' => [                'required',                'max:50',            ],            //帐号(E-mail)            'account' => [                'required',                'max:50',                'email',            ],            //密码            'password' => [                'required',                'min:5',            ],            //密码验证            'password_confirm' => [                'required',                'same:password',                'min:5'            ],        ];        //验证资料        $validator = Validator::make($input, $rules);        if($validator->fails())        {            //资料验证错误            return redirect('/user/auth/sign-up')                        ->withErrors($validator)                        ->withInput();        }        $input['password'] = Hash::make($input['password']);        User::create($input);        //寄送注册通知信        $mail_binding = [            'name' => $input['name']        ];        Mail::send('email.signUpEmailNotification', $mail_binding,        function($mail) use ($input){            //收件人            $mail->to($input['account']);            //寄件人            $mail->from('henrychang0202@gmail.com');            //邮件主旨            $mail->subject('恭喜注册Laravel部落格成功!');        });        //重新导向到登入页        return redirect('/user/auth/sign-in');    }    //使用者登入画面    public function signInPage()    {        $name = 'sign_in';        $binding = [            'title' => ShareData::TITLE,            'name' => $name,        ];        return view('user.sign-in', $binding);    }    //登出    public function signOut()    {        //重新导向回灯入页        return redirect('/user/auth/sign-in');    }}?>

注册功能的总结

在会员注册功能这里,
我们花了很多时间,
详细介绍Laravel的许多相关功能,
很多以前要花不少时间来做的事情,
Laravel都已经帮我们做好了,
我们可以更专心地去构思及开发网站,
不用花太多繁複的时间在重複的事情上.
虽然30天已经快到了,
不过后面还会继续发,
希望能够将整个架构完整地补完.


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章