Jimmy's Code

Want to be a better Coder
^

Laravel Mail and Mailable

2019-09-30

接下來我們要講講關於 Laravel 的 Email 的功能,其實所謂的現代框架,尤其是像 Laravel 本身這樣「全能型」的框架,基本上都會有相關寄信、送信的功能。現在讓我們~開始囉~

介紹 MailTrap 服務

要讓程式寄送電子郵件,首先一定是要有個SMTP的 SERVER 才可以,不可能無緣無故就讓你用幾行程式簡簡單單就寄送出去,當然要有一個從什麼發出來的東西啊~如果不太了解什麼是 SMTP 沒關係,你先將它當作類似 Apache 或者 Nginx 提供 HTTP 服務的東西,只是它是提供Email寄送的服務。

但我們又不是 MIS,哪裡來的 SMTP 啊

沒關係,你只要知道,現代網路上基本上你的問題絕對不是第一個發生的,如果可以,一定有解決方案,如果沒有解決方案,那就解決提出問題的人

總之MailTrap就是類似這樣的服務,可以方便提供開發者作出簡單的測試信件之類的,你現在上面註冊過帳號,然後到https://mailtrap.io/inboxes 這裏,你會看到底下的畫面

https://i2.wp.com/ithelp.ithome.com.tw/upload/images/20190930/201069999g0JUqbrlH.png?ssl=1

選擇點進去某個 inboxes 當中,之後你會看到這樣的畫面。
https://i2.wp.com/ithelp.ithome.com.tw/upload/images/20190930/20106999WkPyYf2H0n.png?ssl=1

叮咚,我們有一個可以測試用的 SMTP 囉~
不過這只是屬於開發中在用的,如果要搬到正式專案上建議仍是要有一個真正的 SMTP Server 喔

填入 SMTP 資訊到.env 當中

如何將 SMTP 連結我們的 Laravel 專案呢?那些繁複的過程和程式其實 Laravel 大部分都幫我們寫好了,我們只要填入資訊即可,讓我們到.env這個檔案當中,你會看到MAIL_DRIVER那裡,請把你剛剛在mailtrap上看到的usernamepassword分別對應填到MAIL_USERNAMEMAIL_PASSWORD
https://i1.wp.com/ithelp.ithome.com.tw/upload/images/20190930/20106999KzLt3Qbr5A.png?ssl=1

開始寫 Mailable

連線資訊準備好了,那我們來準備寄信看看吧!
首先讓我們建立一個叫做Mailable的東西,這是 Laravel 所提供的 class

$ php artisan make:mail FirstMail

有沒有看到app資料夾裡面多了mail/FirstMail.php呢?
https://i1.wp.com/ithelp.ithome.com.tw/upload/images/20190930/20106999uwP2SdY0Pj.png?ssl=1

之後,我們去到FirstMail.php這個檔案改寫一下build()這個地方,改寫為

public function build()
{
    return $this->from('example@example.com')->view('mail.index');
}

有沒有看到很熟悉的view啊,所以讓我們到views裡面建立mail/index.blade.php
https://i2.wp.com/ithelp.ithome.com.tw/upload/images/20190930/201069998Iepk240YG.png?ssl=1

之後在index.blade.php放一段簡單的HelloWorld就好。這樣我們的 Mail 大概完成了啦~

使用 Mailable

之後我們寫一個簡單的路由規則

Route::get('sendMail', function () {
    \Mail::to('abc@abc.com')->send(new \App\Mail\FirstMail);
});

之後php artisan serve之後到http://127.0.0.1:8000/sendMail

回到MailTrap,本堂課完成!
https://i0.wp.com/ithelp.ithome.com.tw/upload/images/20190930/201069999aOraj8Gr8.png?ssl=1

不過啊,寄 Email 也可以帶上一些參數、附件,這些都是可以的喔,如果你有興趣想更加進深,可以參考史上最好看的官方文件:https://laravel.com/docs/6.x/mail

要看完整程式碼的可以參考這裡: https://github.com/r567tw/Make-PHP-Great-Again/commit/85bb74924e6fb29aa7eb4d7910468fbf69b8f8d9

r567tw

住在台北的一位台東developer,最喜歡"忠心"這個形容詞。這一生希望完成三件事:寫一本書、站在TED演講並且想要成為福音及各種學科的橋梁,希望自己能從基督教的思考框架出發與各學科傾聽、回應、對話