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

SQL Mail 擴充預存程序完整參考:啟動、寄發、讀取、自動處理郵件

     編輯:關於SqlServer

核心擴充程序

程序功能關鍵參數
xp_startmail啟動 SQL Mail 工作階段@user, @password (選填)
xp_stopmail停止 SQL Mail無
xp_sendmail寄送郵件@recipients (必填), @subject, @message, @query, @attachments, @copy_recipients, @blind_copy_recipients, @attach_results, @no_header, @width, @separator, @set_user, @dbuse
xp_readmail讀取收件匣郵件@msg_id, @peek, @suppress_attach, @originator (OUTPUT), @subject (OUTPUT), @message (OUTPUT), @recipients (OUTPUT), @skip_bytes, @msg_length
xp_findnextmsg尋找下一封郵件類似 xp_readmail,用於迴圈處理
xp_deletemail刪除郵件@msg_id

典型應用流程

  1. SQL Agent 作業排程呼叫 xp_startmail。
  2. 觸發器/作業步驟呼叫 xp_sendmail 發送警報、報表(@query 附件查詢結果)。
  3. 接收端系統/人工處理郵件,或另一 Agent 作業定期呼叫 xp_readmail + xp_findnextmsg 迴圈讀取指令郵件,解析內容動態執行 T-SQL(需極度謹慎防注入)。
  4. 處理完成呼叫 xp_deletemail 清理。
  5. 作業結束呼叫 xp_stopmail。

重要限制與遷移建議

  • SQL Mail 依賴 MAPI 子系統(Outlook/Exchange),需在伺服器安裝 32 位元 MAPI 用戶端,配置複雜且穩定性差。
  • SQL Server 2005 引入 Database Mail(msdb.dbo.sp_send_dbmail),基於 SMTP、無 MAPI 相依、支援 SSL、重試、排程、多設定檔,強烈建議全面遷移。
  • xp_sendmail 的 @query 參數執行內容為呼叫者權限,動態 SQL 風險高,避免在非受信任輸入中使用。

快速範例:發送查詢結果附件

EXEC xp_startmail;
EXEC xp_sendmail
    @recipients = 'dba@company.com',
    @subject = '每日備份狀態報表',
    @query = 'SELECT database_name, backup_finish_date, type FROM msdb..backupset WHERE backup_finish_date > DATEADD(day, -1, GETDATE())',
    @attach_results = 'TRUE',
    @width = 200,
    @separator = ',';
EXEC xp_stopmail;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved