Laravel基於SwiftMailer函式庫開發了一套郵件套件,
可以支援多種服務,
在我們使用郵件功能之前,
要先安裝Guzzle HTTP函式庫.
composer require guzzlehttp/guzzle
郵件的設定放在config/mail.php檔案中,我們使用Gmail SMTP來當作測試用的郵件服務,在.env的郵件設定如下
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=henrychang0202@gmail.com
MAIL_PASSWORD= (密碼)
MAIL_ENCRYPTION=tls
如果要使用其他郵件服務,
除了設定config/mail.php檔案,
服務相關的驗證資料都放在config/services.php檔案中,
必須要設定完後才可以正常使用,
在設定完Gmail SMTP相關設定後,
就可以開始測試寄送郵件了.
原本正式的流程,
還要經過認證的過程,
不過我們在這裡就直接省略,
直接寄E-mail通知就解決了.
我們可以使用Mail:send()的函式寄送郵件,
相關的程式如下:
app/Http/Controllers/UserAuthController.php
<?PHP
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Validator; //驗證器
use Hash; //雜湊
use Mail; //寄信
use App\Shop\Entity\User; //使用者 Eloquent ORM Model
class 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的完整程式碼
<?PHP
namespace 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天已經快到了,
不過後面還會繼續發,
希望能夠將整個架構完整地補完.