寄送会员通知信
Laravel基于SwiftMailer函式库开发了一套邮件套件,
可以支援多种服务,
在我们使用邮件功能之前,
要先安装Guzzle HTTP函式库.(PHP必须在7.1.3以上)
composer require guzzlehttp/guzzle
邮件相关设定
邮件的设定放在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 ,送出表单之后收邮件
可以成功发送邮件了.
补充:目前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天已经快到了,
不过后面还会继续发,
希望能够将整个架构完整地补完.