sp_processmail (Transact-SQL)
利用擴充預存程序 (xp_findnextmsg、xp_readmail 和 xp_deletemail) 處理來自 MicrosoftSQL Server 收件匣的內送郵件訊息。每一則訊息的訊息主體都應該包含單一查詢。這個程序利用 xp_sendmail 擴充預存程序,將結果集當作附加檔案傳回訊息寄件者。
重要事項 |
---|
請避免使用這個程序。 sp_processmail 程序會處理不明來源透過郵件傳送給您的資訊,也會被利用將惡意程式碼導入您的環境中。在執行程式碼之前,您必須非常小心驗證。併入這個程序的目的,是為了與舊版相容,但在啟用 SQL Mail 之前,並不會安裝它。 |
[!附註]
未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
語法
sp_processmail [ [ @subject = ] 'subject' ]
[ , [ @filetype = ] 'filetype' ]
[ , [ @separator = ] 'separator' ]
[ , [ @set_user = ] 'user' ]
[ , [ @dbuse = ] 'dbname' ]
引數
[@subject = ] 'subject'
這是將解譯成查詢郵件,供 SQL Server 加以處理之郵件訊息的主旨。subject 是 varchar(255),預設值是 NULL。當指定時,sp_processmail 只會處理有這個主旨的訊息。依預設,SQL Server 會依照訊息主體包含查詢的方式來處理所有郵件訊息。[@filetype = ] 'filetype'
這是查詢結果集要當作附加檔案送回訊息寄件者時所用的副檔名。filetype 是 varchar(3),預設值是 "'txt"'。[@separator = ] 'separator'
這是結果集中各資料行的資料行分隔字元 (欄位結束字元)。這項資訊會傳給 xp_sendmail 擴充預存程序,以將結果集傳回訊息寄件者。separator 是 varchar(3),預設值是 'tab',它是適用於在資料行之間使用定位字元的特殊情況。[@set_user = ] 'user'
這是應於其中執行查詢的安全性內容。user 是 varchar(132),預設值是 guest。[@dbuse = ] 'dbname'
這是查詢應該在其中執行的資料庫內容。dbname 是 varchar(132),預設值是 master。
傳回碼值
0 (成功) 或 1 (失敗)
結果集
無
備註
預期內送電子郵件的訊息文字是單一有效 SQL Server 查詢。sp_processmail 只會處理未讀取的訊息。查詢結果會傳回訊息寄件者,且會複製給原始郵件 [副本:] 清單的任何電子郵件使用者。處理好訊息之後,會從收件匣中刪除它們。如果電子郵件通常會傳給伺服器,便應該會經常執行 sp_processmail。若要設定正規的電子郵件處理程序,您可以利用 SQL Server Agent 來排程 sp_processmail 作業的排程。如此便會依照指定的頻率來處理郵件,且會在作業記錄中,記錄一則含有所處理之查詢數目的參考用訊息。
結果會當作一份附加的檔案來傳送。傳送的完整檔案名稱由 "Sql" 後面接著隨機的數字字串及指定的檔案類型副檔名組成,如 Sql356.txt。
重要事項 |
---|
若要在郵件訊息中附加適當的圖示,請確定已適當建立檔案類型的關聯。若要建立檔案關聯,請在桌面中按兩下 [我的電腦],從 [工具] 功能表中選取 [資料夾選項]。在 [資料夾選項] 對話方塊的 [檔案類型] 索引標籤中,指定用來開啟檔案的應用程式。 |
您可以針對不同的資料庫來設定不同的 sp_processmail 作業。例如,您可以採用對於 AdventureWorks 資料庫的查詢必須有 "SQL:AdventureWorks" 主旨的慣例。之後,您便可以指定 SQL:AdventureWorks 的 subject 和 AdventureWorks 的 dbname,以執行 sp_processmail。不同的資料庫查詢和分組,可以使用其他格式結構。例如,散發工作可以有 SQL:distribution 的 subject 和 distribution 的 dbname。所有這些都可以是 SQL Server Agent 所排程的作業。
您也可以利用許多方式來自訂 sp_processmail 系統預存程序,例如,利用 sp_helptext 系統預存程序來擷取程序的文字、修改 Transact-SQL 程式碼,以及建立含有自訂行為的新程序。可能的變更包括:
利用 @type 參數和 xp_findnextmsg 擴充預存程序,只處理特定自訂訊息類型。
將訊息標示為 read,但在處理之後,並不予以刪除 (將 peek 設為 false 來再次執行 xp_readmail)。
將 attach_result 設為 false 來呼叫 xp_sendmail,再移除 attachments 參數,以在電子郵件訊息的主體中傳送查詢結果。
將安全性內容設成在基於訊息寄件者的使用者環境中執行查詢。如果電子郵件使用者名稱與 SQL Server 使用者名稱相同,就會如同將 xp_sendmail 呼叫改成使用 set_user = @originator 一樣簡單。如果您的郵件使用者名稱不是有效的 SQL Server 使用者名稱 (例如,如果它們包含內嵌的空格),您可以執行資料表查閱或字元替代,將適當的 SQL Server 使用者名稱傳給 xp_sendmail。
權限
只有系統管理員 (sysadmin) 固定伺服器角色的成員,才能夠執行這個程序。
範例
下列範例會將收件匣中的所有訊息當作 AdventureWorks 資料庫中的查詢來處理。結果集會以 CSV (以逗號分隔的值) 格式傳回用戶端。
EXEC sp_processmail
@filetype = 'CSV'
,@separator = ','
,@dbuse = 'AdventureWorks';