有時候需要寄通知信給用戶,例如下完訂單會寄信給用戶訂單的細節;或重設密碼時會寄給用戶重設密碼的連結。
如果使用者要先輸入email地址的話,先在前後端都確認用戶輸入的信箱地址是否符合格式(雙重保障!)
後端:
request()->validate(['email'=>'required|email']);
前端
<form action="/" method="post">
@csrf
<input type="email" class="email" name="email" id="email">
<input type="submit">
</form>
@error('email') <!--後端如果驗證非email格式的話會跑這個block-->
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
主要寫信的part在這。
to後面填要寄去的email地址、subject後面填信件標題。
Mail::raw('This is example eamil content',function($message){
$message->to(request('email'))
->subject('Title of Example');
});
設定寄信的方法,可以用smtp真的寄信或log只有紀錄檔。這邊先用log。
所以去.env
編輯一下設置。
MAIL_MAILER=log
MAIL_FROM_ADDRESS=laravel@gmail.com//看要寫什麼,可寫可不寫
這樣寄信就可以看到紀錄了,去storage/logs
查看。
最後可以在Controller加個redirect回上一下並留下寄件成功的訊息,使用者比較不會困惑到底有沒有寄成功。
Mail::raw('This is example eamil content',function($message){
$message->to(request('email'))
->subject('Title of Example');
});
return redirect('/')->with('message', 'email sent');
然後在前端加個顯示訊息的block
@if (session('message'))
<div class="alert alert-success" role="alert">
{{ session('message') }}
</div>
@endif