首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 寄送郵件完整指南 (xp_sendmail / Database Mail)

     編輯:關於SqlServer

SQL Server 內建郵件功能可讓資料庫直接發送通知、報表或警示。本文詳細說明舊版 SQL Mail (xp_startmail/xp_sendmail) 與新版 Database Mail 的設定與使用差異,並提供實用參數速查表。

舊版 SQL Mail (SQL 2000/2005 相容)

架構:需安裝 Outlook/Exchange MAPI 用戶端,依賴 32 位元 MAPI 子系統,不支援 64 位元 SQL Server。

核心預存程序

  • xp_startmail [@user], [@password]:啟動郵件會話 (可透過企業管理器 GUI 啟動)
  • xp_stopmail:停止會話
  • xp_sendmail:發送郵件 (詳細參數見下表)
  • xp_readmail:讀取收件匣郵件

xp_sendmail 關鍵參數速查

參數必要說明
@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;

新版 Database Mail (SQL 2005+ 推薦)

優勢:純 SMTP 協定、支援 64 位元、無需 Outlook、支援 SSL/TLS、多設定檔、排程重試、記錄完整。

設定步驟 (SSMS)

  1. 展開「管理」→「Database Mail」右鍵「設定 Database Mail」
  2. 建立「設定檔」與「帳號」 (填入 SMTP 伺服器、埠號、驗證、SSL 設定)
  3. 於「系統參數」設定預設設定檔、最大附件大小、禁止的副檔名等
  4. 啟用 Service Broker: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;

常見問題排查

  • 郵件卡在 unsent:檢查 msdb.dbo.sysmail_event_log 錯誤日誌;確認 Service Broker 啟用;檢查 SMTP 連線與防火牆。
  • 中文亂碼:Database Mail 預設 UTF-8,確認 @body/@subject 為 Unicode (N'字串');舊版 SQL Mail 需設定代碼頁。
  • 大附件失敗:調整「系統參數」最大附件大小 (預設 1MB) 及 SMTP 伺服器限制。

結論:SQL 2005 以上環境請務必改用 Database Mail,SQL Mail 已標記棄用且 64 位元環境無法運作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved