| 欄位 | 範例值 (以 QQ 企業郵箱為例) | 說明 |
| 帳號名稱 | QQ_Enterprise_Mail | 識別用 |
| 電子郵件地址 | alert@company.com | 寄件人顯示地址 |
| 顯示名稱 | 系統監控中心 | 寄件人顯示名稱 |
| 回覆電子郵件 | alert@company.com | 收件者回覆時的地址 |
| 伺服器名稱 | smtp.exmail.qq.com | SMTP 伺服器 FQDN |
| 連接埠號 | 465 (SSL) / 587 (TLS) | 依郵件商要求 |
| 驗證方式 | 基本驗證 | 輸入完整信箱帳號與密碼 |
| 啟用 SSL | 勾選 | 保障傳輸加密 |
可新增多個帳號至同一設定檔,Database Mail 會依序嘗試,自動容錯切換。
啟用進階選項與 Database Mail XPs
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'Database Mail XPs', 1; RECONFIGURE;
或在嚮導最後一步勾選「啟用 Database Mail」。
發送測試郵件 (T-SQL 驗證)
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DB_Mail_Profile',
@recipients = 'test@example.com',
@subject = 'Database Mail 測試',
@body = '若收到此郵件,表示 Database Mail 設定成功!',
@body_format = 'TEXT'; -- 或 HTML
查詢發送狀態與日誌
-- 所有郵件項目
SELECT * FROM msdb.dbo.sysmail_allitems ORDER BY send_request_date DESC;
-- 僅失敗項目
SELECT * FROM msdb.dbo.sysmail_faileditems;
-- 詳細錯誤日誌
SELECT * FROM msdb.dbo.sysmail_log ORDER BY log_date DESC;
sysmail_mailitems.sent_status:1=已發送、2=失敗、3=未發送/重試中。
安全性最佳實踐
- 建立專用
DatabaseMailUserRole 角色,僅授予必要帳號 EXECUTE 權限於 sp_send_dbmail。
- SMTP 帳號密碼勿寫死於程式碼,利用 SQL Server 認證儲存或 Azure Key Vault 整合。
- 定期清理
msdb 郵件歷史:EXEC msdb.dbo.sysmail_delete_mailitems_sp @sent_before = '2023-01-01';。
結語
Database Mail 是 SQL Server 內建、免費且功能完整的郵件發送機制。透過圖形化嚮導完成設定檔與 SMTP 帳號建立,再以 T-SQL 或 Agent 作業驅動,即可滿足監控告警、報表訂閱、流程通知等多樣化場景。
- 上一篇文章: SQL Server 結合預存程序與 Database Mail 實現定時發送郵件
- 下一篇文章: SQL Server 死鎖與阻塞源頭快速定位腳本:兩種實用查詢法
Copyright ©
程式碼之家 All Rights Reserved