使用擴展存儲過程(xp_findnextmsg、xp_readmail 和 xp_deletemail)處理 Microsoft® SQL Server™ 收件箱中收到的郵件(應只有單個查詢)。SQL Server 用 xp_sendmail 擴展存儲過程向郵件發(fā)送者返回結(jié)果集。
sp_processmail [ [ @subject = ] 'subject' ]
[ , [ @filetype = ] 'filetype' ]
[ , [ @separator = ] 'separator' ]
[ , [ @dbuse = ] 'dbname' ]
[ , [ @set_user = ] 'user' ]
[@subject =] 'subject'
是郵件的主題行,該行將解釋為 SQL Server 查詢。subject 為 varchar(255) 類型,其默認值為 NULL。若指定此參數(shù),sp_processmail 將只處理有此主題的郵件。默認情況下,SQL Server 象處理查詢一樣處理所有郵件。
[@filetype =] 'filetype'
是將結(jié)果集文件發(fā)送回郵件發(fā)送者時使用的文件擴展名。filetype 為 varchar(3) 類型,其默認值為 txt。
[@separator =] 'separator'
是結(jié)果集中每列的列分隔符(字段終止符)。這一信息將傳遞給擴展存儲過程 xp_sendmail 以向郵件發(fā)送者返回結(jié)果集。separator 為 varchar(3) 類型,其默認值為 tab,表示在各列之間使用制表符的特殊情況。
[@set_user =] 'user'
是應在其中運行查詢的安全上下文。user 的數(shù)據(jù)類型為 sysname。如果沒有指定 user,則安全上下文默認授予執(zhí)行 xp_sendmail 的用戶。
[@dbuse =] 'dbname'
是查詢應運行于其中的數(shù)據(jù)庫上下文。dbname 為 sysname 類型,其默認值為 master。
0(成功)或 1(失敗)
無
外來電子郵件應以一個單獨的有效 SQL Server 查詢作為其郵件正文。查詢的結(jié)果將返回給郵件發(fā)件人,并抄送給抄送列表中的所有電子郵件用戶。郵件經(jīng)過處理后,將從收件箱中刪除。如果時常有電子郵件發(fā)送給服務器,就應經(jīng)常運行 sp_processmail。若要設置定期的電子郵件處理,可使用 SQL Server 代理程序來調(diào)度 sp_processmail 作業(yè)。這樣,郵件將按指定的頻率處理,并在作業(yè)歷史記錄中記錄信息性消息,其中包含已處理的查詢數(shù)目。
返回結(jié)果將作為附件文件發(fā)送。所發(fā)送文件的完整文件名由 Sql 后加隨機數(shù)字字符串構(gòu)成,然后是指定的擴展名(文件類型),例如 Sql356.txt。
重要 若要在郵件中附加適當?shù)膱D標,需確保文件類型的關聯(lián)正確。若要創(chuàng)建文件關聯(lián),請雙擊桌面上的"我的電腦",然后選擇"視圖"菜單中的"選項"命令。在"選項"對話框中的"文件類型"選項卡上,指定用于打開文件的應用程序。
處理查詢時收到的錯誤通過郵件正文返回給郵件發(fā)送者。將結(jié)果集返回給客戶端時,會調(diào)用 xp_sendmail,并將其參數(shù) @echo_error 設為 true。所發(fā)送的郵件還會包括查詢的行數(shù)(影響到的行數(shù))。
可為不同數(shù)據(jù)庫中的查詢設置不同的 sp_processmail 作業(yè)。例如,可采用這樣的約定:對數(shù)據(jù)庫 pubs 的查詢的主題必須為 SQL:pubs。然后,可運行 sp_processmail,并使用參數(shù) subject = SQL:pubs 及 dbname = pubs。其它數(shù)據(jù)庫查詢和分組可有其它格式化的結(jié)構(gòu)。例如,分發(fā)任務可有 subject = SQL:distribution 和 dbname = distribution。任何這些任務均可以是 SQL Server 代理程序調(diào)度的作業(yè)。
也可以按許多方式自定義 sp_processmail 系統(tǒng)存儲過程,方法是用 sp_helptext 系統(tǒng)存儲過程檢索該過程的正文,然后修改其 Transact-SQL 代碼??赡艿母陌ǎ?br />
只有 sysadmin 固定服務器角色或 db_owner 固定數(shù)據(jù)庫角色的成員可執(zhí)行此過程。
下面的示例處理 pubs 數(shù)據(jù)庫中的所有郵件,并將結(jié)果集以 CSV(逗號分隔的值)格式返回給客戶端。
sp_processmail @filetype = 'CSV', @separator = ',', @dbuse = 'pubs'
相關文章