Laravel Mail 驗證連線功能

如何在 Laravel 專案中測試郵件伺服器設定是否正確,可用於部署或開發階段確認 .env 中的郵件設定是否可正常連線。


測試信箱連線狀態

使用 Laravel 內建的 Mail facade 可檢查目前的郵件設定是否可與伺服器建立連線。

程式碼範例

use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Log;
use Swift_TransportException; // 僅適用於使用 SwiftMailer 的 Laravel 版本

private function checkMailConnection(): bool
{
    try {
        Mail::getSwiftMailer()->getTransport()->start();
        return true;
    } catch (Swift_TransportException $e) {
        Log::error('Mail transport error: ' . $e->getMessage());
        return false;
    } catch (\Exception $e) {
        Log::error('General mail error: ' . $e->getMessage());
        return false;
    }
}

⚠️ 注意事項

  • Laravel 9 之後預設 改用 Symfony Mailer,上述方法需依據實際驅動調整。若專案使用 Symfony Mailer,Mail::getSymfonyTransport() 才是正確用法。
  • 上述程式僅適用於 Laravel 8 或更早版本(使用 SwiftMailer)。

Laravel 9+ (Symfony Mailer) 替代方案:

若使用 Laravel 9 以上版本,建議以寄送測試信件來驗證設定是否正確,如下:

use Illuminate\Support\Facades\Mail;

Mail::raw('This is a test email.', function ($message) {
    $message->to('[email protected]')
            ->subject('Test Mail');
});

建議用途

  • CI/CD 部署後的健康檢查機制
  • 後台管理介面中的「測試郵件設定」功能
  • 排除寄信失敗問題時使用

延伸閱讀