共用方式為


sp_processmail (Transact-SQL)

利用擴充預存程序 (xp_findnextmsgxp_readmailxp_deletemail) 處理來自 Microsoft SQL Server 收件匣的內送郵件訊息。每一則訊息的訊息主體都應該包含單一查詢。這個程序利用 xp_sendmail 擴充預存程序,將結果集當作附加檔案傳回訊息寄件者。

重要事項重要事項

請避免使用這個程序。sp_processmail 程序會處理不明來源透過郵件傳送給您的資訊,也會被利用將惡意程式碼導入您的環境中。在執行程式碼之前,您必須非常小心驗證。併入這個程序的目的是為了與舊版相容,但在啟用 SQL Mail 之前,並不會安裝它。

[!附註]

未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

主題連結圖示Transact-SQL 語法慣例

語法

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 作業。例如,您可以採用對於 AdventureWorks2008R2 資料庫的查詢必須有 "SQL:AdventureWorks" 主旨的慣例。之後,您便可以指定 SQL:AdventureWorks 的 subject 和 AdventureWorks2008R2 的 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) 固定伺服器角色的成員才能夠執行這個程序。

範例

下列範例會將收件匣中的所有訊息當做 AdventureWorks2008R2 資料庫中的查詢來處理。結果集會以 CSV (以逗號分隔的值) 格式傳回用戶端。

EXEC sp_processmail
    @filetype = 'CSV'
    ,@separator = ','
    ,@dbuse = 'AdventureWorks2008R2';