寄信
介紹
Laravel 使用 SwiftMailer[1] library 來處理寄信的功能,並在其上提供一個 API 讓操作更簡單。
mail 的相關設定在:
driver 預設是 'smtp'。如果你要使用 PHP 的 mail 函式,可以改為 'mail'。其他可用的還有 'sendmail'、'mailgun'、'mandrill'及'log'。
使用 log 的話,Laravel 就不會真的寄信,而是把要寄出的信寫入 log 檔。log 檔的位置在
使用 Gmail SMTP
假設你要使用 Gmail SMTP 來寄信,設定如下:
這裡有點要小心,因為你是以明碼填入你的 gmail 密碼,所以請小心防止這個檔案被查看(或是另外申請一個,絕對不要把自己常用的 gmail 帳號拿來使用)。
寄信
通常的寄信情境是,使用者填完表單後才寄送,所以在 Controller 中做驗證表單資料的動作,最後一個步驟才是寄信。
Controller 的部份
大概的程式碼會是:
Mail::send() 方法第一個參數是自定的 view。第二個是要寄送的資料,第三個 function 會有一個 $message 用來指定 from 、to等資訊,如果要同時寄送副本,可以在 to 之後串接 cc:
如果要在 function 中用到外部的變數,像是這個的 $from 及 $to,要使用 use(變數名稱) 。
夾帶檔案:
View 的部份
新增 app/views/emails/post.blade.php:
資料全都由前面提到的 Mail::send() 中的 $data 所傳遞。
非同步寄送
使用 Mail::send() 方法會在寄送完成後才返回控制權,這時候網頁看起來會像是停住了。這時候可以改用 Mail::queue(),參數都一樣,只是它會送進佇列後,在背景等待傳送,這樣就不會讓網頁看起來像是停住了。
另外,也可以用 Mail::later(10, 其餘參數相同) 來延遲寄送,參數相同,但在最前面多一個延遲秒數的參數。
Last updated