Skip to main content

Laravel 的郵件功能是什麼

Laravel 的郵件功能建立在 Symfony Mailer 之上,支援 SMTP、Mailgun、Postmark、Resend、Amazon SES、sendmail 等驅動。
以往 Laravel 使用的 SwiftMailer 已被廢棄。Laravel 9 以後改用 Symfony Mailer。
郵件設定於 config/mail.php 管理。可透過 .env 切換使用的驅動。

建立 Mailable 類別

在 Laravel 中,每封應用程式寄出的信會以「Mailable」類別表達。可用 make:mail Artisan 指令建立。
產生的類別會放到 app/Mail/ 目錄。

Mailable 設定

產生的 Mailable 類別會有 envelope()content()attachments() 3 個方法。

設定寄件者

envelope() 指定寄件者。
若在 config/mail.php 設定全域寄件者,個別 Mailable 就可省略。

設定郵件內容

content() 指定 Blade 樣板。建構子中設定為 public 屬性的資料會自動可在樣板中使用。
建立對應的 Blade 樣板(resources/views/mail/orders/shipped.blade.php):
也可以透過 with 明確傳入資料。此時屬性可設為 protectedprivate

寄送郵件

Mail Facade 的 to() 指定收件者,send() 寄送。
可指定 CC / BCC。
用特定 mailer 寄送可使用 mailer()

使用佇列寄送郵件

郵件寄送會影響回應時間,建議透過佇列在背景寄送。
使用佇列前需先設定佇列並啟動 worker。
也可以延遲寄送:
在 Mailable 類別實作 ShouldQueue,即使呼叫 send() 也一定會進入佇列。

用 PHP 屬性指定佇列連線與佇列名稱

可用 PHP 屬性直接於 Mailable 上指定佇列連線與名稱,取代 on()->queue() 方法鏈,以類別層級宣告式設定。
如此一來,可在類別定義上明確表示此 Mailable 永遠會送到 SQS 連線的 emails 佇列。

建立 Markdown Mail

使用 Markdown 格式的郵件,可運用 Laravel 提供的漂亮響應式 HTML 樣板。

產生 Markdown Mailable

--markdown 選項產生 Mailable。
content() 使用 markdown 參數:

撰寫 Markdown 樣板

以 Laravel 提供的 Blade 元件撰寫內容。
可用的元件:
Markdown 郵件會同時自動產生純文字版本。即便使用不支援 HTML 的信箱也能讀取。

郵件預覽

從路由回傳 Mailable 實例即可在瀏覽器預覽。適合開發期確認。

本機開發時的郵件

為避免在本機不小心寄送到正式環境的信箱,可以使用 Mailpit 等工具。
LaragonLaravel Herd 皆預設內含 Mailpit。
使用 log 驅動時,郵件內容會記錄到日誌檔。若只是想確認寄信這是最方便的方式。

總結

最後修改於 2026年8月2日