以下例子使用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 是個簡單例子
實際的情況比如是你可以把 Order
、Invoice
等等真的有需要寄給客客戶的內容放在 這個位置取代$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