Laravel 5.3中的郵件記錄:擴展郵件驅動程序
Laravel 5.3郵件發送擴展:自定義數據庫郵件日誌
Laravel 5.3 提供了一種簡單的方法來配置和通過多種流行服務發送電子郵件,並包含一個用於開發的日誌輔助程序。然而,它並不涵蓋所有可用的服務,因此可能需要擴展現有的郵件驅動程序系統。
關鍵要點:
- Laravel 5.3 提供了通過多種流行服務輕鬆配置和發送電子郵件的簡便方法,並包含用於開發的日誌輔助程序。但是,它並不涵蓋所有可用的服務,因此可能需要擴展現有的郵件驅動程序系統。
- 要擴展郵件驅動程序系統,可以使用 artisan 命令行助手創建一個新的服務提供程序。此服務提供程序在啟動時與應用程序交互並註冊服務。
- 新的服務提供程序可以擴展現有的
IlluminateMailMailServiceProvider
,允許register
方法已被實現。這允許創建新的傳輸管理器,該管理器可以將 Swift mailer 實例綁定到容器。 - 擴展的郵件驅動程序系統可用於將電子郵件記錄到數據庫表中以進行調試。這是通過為數據庫表創建一個新的遷移和一個新的模型來與表交互來實現的。然後將提供程序添加到
config/app.php
文件中的提供程序列表中,並將郵件驅動程序註冊到config/mail.php
文件中的db
中。
Laravel 提供了許多實用功能,其中包括郵件發送功能。您可以輕鬆配置並通過多種流行服務發送電子郵件,它甚至包含用於開發的日誌輔助程序。
Mail::send('emails.welcome', ['user' => $user], function ($m) use ($user) { $m->to($user->email, $user->name)->subject('Welcome to the website'); });
這將使用 emails.welcome
視圖向網站上的新註冊用戶發送電子郵件。使用 Laravel 5.3 中的 Mailable,它變得更加簡單(但舊語法仍然有效)。
以下是一個示例:
# 生成一个新的可邮件类 php artisan make:mail WelcomeMail
// app/Mail/WelcomeMail.php class WelcomeUser extends Mailable { use Queueable, SerializesModels; public $user; public function __construct(User $user) { $this->user = $user; } public function build() { return $this->view('emails.welcome'); } }
// routes/web.php Route::get('/', function () { $user = User::find(2); \Mail::to($user->email)->send(new WelcomeUser($user)); return "done"; });
Laravel 還提供了一個良好的起點,用於在開發階段使用日誌驅動程序發送郵件,在生產階段使用 smtp、sparkpost、mailgun 等。在大多數情況下,這似乎很好,但它無法涵蓋所有可用的服務!在本教程中,我們將學習如何擴展現有的郵件驅動程序系統以添加我們自己的驅動程序。
為了使我們的示例簡單明了,我們將郵件日誌記錄到數據庫表中。
創建服務提供程序
實現此目的的首選方法是創建一個服務提供程序,以便在啟動時與我們的應用程序交互並註冊我們的服務。讓我們首先使用 artisan 命令行助手生成一個新的服務提供程序。
Mail::send('emails.welcome', ['user' => $user], function ($m) use ($user) { $m->to($user->email, $user->name)->subject('Welcome to the website'); });
這將在我們的 app/Providers
文件夾中創建一個新的類。如果您熟悉 Laravel 服務提供程序,您將知道我們擴展了 ServiceProvider
類並定義了 boot
和 register
方法。您可以在文檔中閱讀更多關於提供程序的信息。
使用郵件提供程序
與其使用父服務提供程序類,我們可以採取捷徑並擴展現有的 IlluminateMailMailServiceProvider
。這意味著 register
方法已實現。
# 生成一个新的可邮件类 php artisan make:mail WelcomeMail
registerSwiftMailer
方法將根據 mail.driver
配置值返回相應的傳輸驅動程序。我們在這裡可以做的是在調用 registerSwiftMailer
父方法之前執行檢查並返回我們自己的 傳輸管理器。
// app/Mail/WelcomeMail.php class WelcomeUser extends Mailable { use Queueable, SerializesModels; public $user; public function __construct(User $user) { $this->user = $user; } public function build() { return $this->view('emails.welcome'); } }
使用傳輸管理器
Laravel 從 IOC 解析 swift.mailer
實例,它應該返回 Swift_Mailer 的 SwiftMailer 實例。我們需要將我們的 Swift mailer 實例綁定到容器。
// routes/web.php Route::get('/', function () { $user = User::find(2); \Mail::to($user->email)->send(new WelcomeUser($user)); return "done"; });
您可以將傳輸對象視為實際的驅動程序。如果您檢查 IlluminateMailTransport
命名空間,您會發現每個驅動程序的不同傳輸類(例如:LogTransport
、SparkPostTransport
等)。
Swift_Mailer
類需要一個 Swift_Transport
實例,我們可以通過擴展 IlluminateMailTransportTransport
類來滿足它。它應該看起來像這樣。
php artisan make:provider DBMailProvider
我們應該在這裡實現的唯一方法是 send
方法。它負責郵件發送邏輯,在這種情況下,它應該將我們的電子郵件記錄到數據庫中。至於我們的構造函數,我們目前可以將其留空,因為我們不需要任何外部依賴項。
$message->getTo()
方法始終返回收件人電子郵件和名稱的關聯數組。我們使用 array_keys
函數獲取電子郵件列表,然後將它們合併以獲取字符串。
將電子郵件記錄到數據庫
下一步是為我們的數據庫表創建必要的遷移。
// vendor/Illuminate/Mail/MailServiceProvider.php public function register() { $this->registerSwiftMailer(); // ... }
// app/Providers/DBMailProvider.php function registerSwiftMailer() { if ($this->app['config']['mail.driver'] == 'db') { $this->registerDBSwiftMailer(); } else { parent::registerSwiftMailer(); } }
我們的遷移只包含電子郵件正文、主題和收件人電子郵件,但您可以根據需要添加更多詳細信息。檢查 Swift_Mime_Message
類定義以查看可用字段的列表。
現在,我們需要創建一個新的模型來與我們的表交互,並將必要的字段添加到 fillable
數組中。
Mail::send('emails.welcome', ['user' => $user], function ($m) use ($user) { $m->to($user->email, $user->name)->subject('Welcome to the website'); });
# 生成一个新的可邮件类 php artisan make:mail WelcomeMail
發送電子郵件
好的,現在是時候測試我們到目前為止所取得的成果了。我們首先將我們的提供程序添加到 config/app.php
文件中的提供程序列表中。
// app/Mail/WelcomeMail.php class WelcomeUser extends Mailable { use Queueable, SerializesModels; public $user; public function __construct(User $user) { $this->user = $user; } public function build() { return $this->view('emails.welcome'); } }
然後我們將郵件驅動程序註冊到 config/mail.php
文件中的 db
中。
// routes/web.php Route::get('/', function () { $user = User::find(2); \Mail::to($user->email)->send(new WelcomeUser($user)); return "done"; });
唯一剩下的部分是發送測試電子郵件並檢查它是否被記錄到數據庫中。我將在訪問主頁 URL 時發送電子郵件。以下是代碼。
php artisan make:provider DBMailProvider
訪問主頁路由後,我們可以運行 php artisan tinker
命令來檢查 emails
表記錄。
結論
在本文中,我們看到瞭如何擴展郵件驅動程序系統以攔截電子郵件以進行調試。我在 Laravel 中欣賞的一件事是其無與倫比的可擴展性:您可以更改或擴展從路由器和 IOC 到郵件及其他幾乎所有功能。
如果您有任何問題或意見,請務必在下面發表,我會盡力回答!
關於 Laravel 5.3 中郵件日誌記錄的常見問題解答 (FAQ)
如何擴展 Laravel 5.3 中的郵件驅動程序?
擴展 Laravel 5.3 中的郵件驅動程序涉及創建新的服務提供程序。此服務提供程序將擴展現有的郵件驅動程序,並允許您添加其他功能。您可以使用 php artisan make:provider
命令創建新的服務提供程序。創建提供程序後,您可以將其註冊到 config/app.php
文件中。在提供程序中,您可以使用 extend
方法將自定義功能添加到郵件驅動程序。
Laravel 中郵件日誌記錄的目的是什麼?
Laravel 中的郵件日誌記錄是一個允許您跟踪應用程序發送的所有傳出電子郵件的功能。這對於調試非常有用,因為它允許您準確查看正在發送哪些電子郵件、何時發送以及發送給誰。它也對審計非常有用,因為它提供了應用程序發送的所有電子郵件通信的記錄。
如何配置 Laravel 以記錄所有傳出電子郵件?
要配置 Laravel 以記錄所有傳出電子郵件,您需要修改 config/mail.php
文件。在此文件中,您可以將 log
選項設置為 true
。這將指示 Laravel 記錄所有傳出電子郵件。日誌將存儲在 storage/logs
目錄中。
如何查看 Laravel 中的郵件日誌?
Laravel 中的郵件日誌存儲在 storage/logs
目錄中。您可以通過導航到此目錄並打開日誌文件來查看這些日誌。日誌文件根據日期命名,因此您可以輕鬆找到特定日期的日誌。
我可以自定義 Laravel 中郵件日誌的格式嗎?
是的,您可以自定義 Laravel 中郵件日誌的格式。這可以通過擴展郵件驅動程序並覆蓋 log
方法來完成。在此方法中,您可以指定日誌消息的格式。
(其餘FAQ與郵件發送本身相關,與本例的郵件日誌擴展無關,故省略)
請注意,圖片路徑 /uploads/20250210/173915090467a9563807841.webp
和 /uploads/20250210/173915090467a9563839bfc.webp
以及 /uploads/20250210/173915090667a9563a27b41.jpg
需要替換為實際可訪問的圖片鏈接。
以上是Laravel 5.3中的郵件記錄:擴展郵件驅動程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP通過$\_FILES變量處理文件上傳,確保安全性的方法包括:1.檢查上傳錯誤,2.驗證文件類型和大小,3.防止文件覆蓋,4.移動文件到永久存儲位置。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。
