SQL Server 內建郵件功能可讓資料庫直接發送通知、報表或警示。本文詳細說明舊版 SQL Mail (xp_startmail/xp_sendmail) 與新版 Database Mail 的設定與使用差異,並提供實用參數速查表。
架構:需安裝 Outlook/Exchange MAPI 用戶端,依賴 32 位元 MAPI 子系統,不支援 64 位元 SQL Server。
xp_startmail [@user], [@password]:啟動郵件會話 (可透過企業管理器 GUI 啟動)xp_stopmail:停止會話xp_sendmail:發送郵件 (詳細參數見下表)xp_readmail:讀取收件匣郵件| 參數 | 必要 | 說明 |
|---|---|---|
| @recipients | 是 | 收件者,多筆用分號分隔 |
| @subject | 否 | 郵件主旨 |
| @message | 否 | 純文字內容 |
| @query | 否 | 執行並附加結果的 T-SQL 查詢 |
| @attachments | 否 | 附件路徑 (伺服器端路徑) |
| @attach_results | 否 | 查詢結果以附件寄送 (TRUE/FALSE) |
| @no_header | 否 | 不包含欄位名稱 |
| @width | 否 | 文字輸出寬度 |
| @separator | 否 | 欄位分隔字元 (預設 Tab) |
| @set_user | 否 | 查詢執行身分 (預設 Guest) |
| @dbuse | 否 | 查詢使用的資料庫 |
EXEC xp_startmail;
EXEC xp_sendmail
@recipients = 'admin@company.com',
@subject = '每日銷售報表',
@query = 'SELECT * FROM Sales.DailySummary WHERE SaleDate = CONVERT(DATE, GETDATE())',
@attach_results = 'TRUE',
@width = 200,
@separator = ',',
@no_header = 'FALSE';
EXEC xp_stopmail;
優勢:純 SMTP 協定、支援 64 位元、無需 Outlook、支援 SSL/TLS、多設定檔、排程重試、記錄完整。
ALTER DATABASE msdb SET ENABLE_BROKER;EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SQL_Alert_Profile',
@recipients = 'dba@company.com',
@subject = '資料庫備份完成',
@body = '今日全備已完成,耗時 45 分鐘。',
@query = 'SELECT database_name, backup_finish_date FROM msdb..backupset WHERE type = ''D'' AND backup_finish_date > DATEADD(DAY, -1, GETDATE())',
@attach_query_result_as_file = 1,
@query_attachment_filename = 'BackupReport.csv',
@query_result_separator = ',',
@query_result_no_padding = 1;
msdb.dbo.sysmail_event_log 錯誤日誌;確認 Service Broker 啟用;檢查 SMTP 連線與防火牆。結論:SQL 2005 以上環境請務必改用 Database Mail,SQL Mail 已標記棄用且 64 位元環境無法運作。