Larvel Mail 基本使用

以下例子使用Laravel 內容的 Mail

基本寄信

command line 執行
php artisan make:mail Welcome
App\Mail\WelcomeMail.php
namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class WelcomeMail extends Mailable {
    use Queueable, SerializesModels;
    public function __construct() {
    }

    public function build() {
        return $this->view('email.welcome');                
                            //resources/views/email/welcome.blade.php
    }
}
建立resources/views/email/welcome.blade.php
<h1>
Welcome!!
</h1>
在Controller中....
use App\Mail\WelcomeMail;
....
Mail::to($email)->send(new WelcomeMail());

加入動態內容

在Controller中...把 $user 對象傳入 WelcomeMail
use App\Mail\WelcomeMail;
....
$user = User::find($id);
Mail::to($user->email)->send(new WelcomeMail($user));
App\Mail\WelcomeMail.php
namespace App\Mail;

use App\Models\User;   //在此加入對應的Model
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class WelcomeMail extends Mailable {
    use Queueable, SerializesModels;

    public $user;  //把$user 設定為公開,可在Blade直接用

    public function __construct(User $user) {
        $this->user = $user;
    }

    public function build() {
        return $this->view('email.welcome');
                            //resources/views/email/welcome.blade.php
    }
}
在對應的Blade resources/views/email/welcome.blade.php
<h1>
Welcome, {{ $user->name }} !!

你的電郵是:{{ $user->email }}
</h1>
自定義電郵標題

App\Mail\WelcomeMail.php

    public function build() {
        return $this->view('email.welcome')
                    ->subject('自定義電郵標題');
    }

上面的$user 是個簡單例子

實際的情況比如是你可以把 OrderInvoice 等等真的有需要寄給客客戶的內容放在 這個位置取代$user Mail::to($user->email)->send(new WelcomeMail($user))

CC/BCC ?

Mail::to($email)
        ->cc('xxxx@xxxx.com')
        ->bcc('xxxx@xxxx.com')
        ->send(new WelcomeMail());

建議填上BCC,可當作做寄件備份給自己做記錄

進階:排序寄信 Queue

首先把 send() 換成 queue()
Mail::to($email)->queue(new WelcomeMail());
.env
QUEUE_CONNECTION = database
或者
QUEUE_CONNECTION = redis
然後做對應的設定

比如如果你選用了database 是否又應該用Jobs? redis 又應該要用上 Laravel horizon ? 這邊的內容相信比單單的 Mail 更複雜,日後再分享有關queue的內容

如果不想用排序的,又不想阻塞當前頁面,可考慮用Laravel Event+Listeners

直接寄信不用任何模板

可參考一下這篇:https://skychoy.com/posts/42-laravel-mail-base-send