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

SQL Server 與 Exchange Server 整合應用:SQL Mail 詳細設定與 xp_sendmail 實戰

     編輯:關於SqlServer

前言

SQL Mail 讓 SQL Server 能透過 Exchange Server 發送/接收郵件,支援警示通知、報表分發等自動化情境。本文詳細說明 xp_sendmail 擴充預存程序的完整參數與用法。

xp_sendmail 完整語法

xp_sendmail
    [ @recipients = ] 'recipients[;...n]'
    [ , [ @message = ] 'message' ]
    [ , [ @query = ] 'query' ]
    [ , [ @attachments = ] 'attachments' ]
    [ , [ @copy_recipients = ] 'copy_recipients[;...n]' ]
    [ , [ @blind_copy_recipients = ] 'blind_copy_recipients[;...n]' ]
    [ , [ @subject = ] 'subject' ]
    [ , [ @type = ] 'type' ]
    [ , [ @attach_results = ] 'attach_value' ]
    [ , [ @no_output = ] 'output_value' ]
    [ , [ @no_header = ] 'header_value' ]
    [ , [ @width = ] width ]
    [ , [ @separator = ] 'separator' ]
    [ , [ @echo_error = ] 'echo_value' ]
    [ , [ @set_user = ] 'user' ]
    [ , [ @dbuse = ] 'database' ]

參數詳細說明

參數說明預設值
@recipients收件者郵件地址,多個以分號分隔 (必要)無
@message郵件本文內容,最長 7990 位元組空白
@queryT-SQL 查詢語句,結果集將附於郵件中,最長 8000 位元組無
@attachments附件檔案完整路徑無
@copy_recipients副本 (CC) 收件者無
@blind_copy_recipients密件副本 (BCC) 收件者,不顯示於郵件中無
@subject郵件主旨SQL Server Message
@typeMAPI 郵件類型空白
@attach_results是否將查詢結果作為附件發送 (TRUE/FALSE)FALSE
@no_output是否不回傳資訊至 SQL 用戶端 (TRUE/FALSE)FALSE
@no_header是否不包含查詢結果欄位名稱 (TRUE/FALSE)FALSE
@width查詢結果行寬 (字元數),預設 80,建議設大避免截斷80
@separator查詢結果欄位分隔字元空白
@echo_error是否在 SQL 用戶端顯示錯誤 (TRUE/FALSE)FALSE
@set_user模擬執行的使用者內容目前使用者
@dbuse查詢執行的資料庫內容目前資料庫

實用範例

範例 1:發送簡單警示郵件

EXEC master..xp_sendmail
    @recipients = 'dba@company.com',
    @subject = 'SQL Server 警示:磁碟空間不足',
    @message = 'C: 磁碟剩餘空間低於 10%,請立即處理。',
    @importance = 'HIGH';

範例 2:發送每日銷售報表 (查詢結果內嵌)

EXEC master..xp_sendmail
    @recipients = 'sales@company.com',
    @subject = '每日銷售報表 ' + CONVERT(VARCHAR(10), GETDATE(), 111),
    @query = 'SELECT ProductName, SUM(Amount) AS TotalSales FROM Sales WHERE SaleDate = CONVERT(DATE, GETDATE()) GROUP BY ProductName',
    @width = 200,
    @separator = '	',
    @no_header = 'FALSE',
    @attach_results = 'FALSE';

範例 3:發送附件 (備份記錄檔)

EXEC master..xp_sendmail
    @recipients = 'backup@company.com',
    @subject = '資料庫備份完成記錄',
    @attachments = 'D:\BackupLogs\backup_20240115.log';

前置設定檢查清單

  1. SQL Server 服務帳號必須為具備 Exchange 信箱存取權限的網域使用者帳號。
  2. 在伺服器上設定 MAPI 設定檔 (Control Panel → Mail),並測試可正常收發郵件。
  3. SQL Server Enterprise Manager → 伺服器屬性 → 「SQL Mail」頁籤,選取正確的 MAPI 設定檔並啟用 SQL Mail。
  4. 授與需使用 xp_sendmail 的登入 EXECUTE 權限 (預設 public 角色擁有)。

常見問題排除

  • 郵件發不出:檢查 SQL Server 服務帳號郵件設定檔、Exchange 連線、防火牆連接埠 (RPC/MAPI)。
  • 中文亂碼:確認 MAPI 設定檔編碼、資料庫排序規則、郵件用戶端編碼一致 (建議 Unicode)。
  • 大量郵件效能:避免在觸發器中同步呼叫 xp_sendmail,建議寫入佇列資料表,由 Agent 作業非同步發送。

結語

掌握 xp_sendmail 完整參數與前置設定,能讓 SQL Server 無縫整合企業郵件系統,實現自動化通知與報表分發。注意權限最小化與非同步處理,避免影響資料庫核心效能。

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