閱讀 Microsoft® SQL Server™ 郵件收件箱中的郵件。sp_processmail 使用此過程處理 SQL Server 收件箱中的所有郵件。
xp_readmail [[@msg_id =] 'message_number']
[, [@type =] 'type' [OUTPUT]]
[,[@peek =] 'peek']
[,[@suppress_attach =] 'suppress_attach']
[,[@originator =] 'sender' OUTPUT]
[,[@subject =] 'subject' OUTPUT]
[,[@message =] 'message' OUTPUT]
[,[@recipients =] 'recipients [;...n]' OUTPUT]
[,[@cc_list =] 'copy_recipients [;...n]' OUTPUT]
[,[@bcc_list =] 'blind_copy_recipients [;...n]' OUTPUT]
[,[@date_received =] 'date' OUTPUT]
[,[@unread =] 'unread_value' OUTPUT]
[,[@attachments =] 'attachments [;...n]' OUTPUT])
[,[@skip_bytes =] bytes_to_skip OUTPUT]
[,[@msg_length =] length_in_bytes OUTPUT]
[,[@originator_address =] 'sender_address' OUTPUT]]
[@msg_id =] 'message_number'
是要閱讀的郵件的編號。message_number 的數(shù)據(jù)類型為 varchar(255),無默認值。
'type'
是基于以下 MAPI 郵件定義返回的郵件類型:
IP[M | C].Vendorname.subclass
如果用于輸入,則此參數(shù)必須定義特定郵件的類型;如果 message_number 為 NULL,則忽略輸入的 type。type 的數(shù)據(jù)類型為 varchar(255),其默認值為 NULL。
OUTPUT
如果指定,則將指定參數(shù)值置于輸出參數(shù)中。
[@peek =] 'peek'
是否 SQL Server 返回郵件而不更改要閱讀郵件的狀態(tài)。peek 的數(shù)據(jù)類型為 varchar(5),其默認值為 FALSE。如果設置為 false,則將郵件視為"已讀"。如果設置為 true,則將郵件視為"未讀"。
[@suppress_attach =] 'suppress_attach'
是否忽略郵件附件。suppress_attach 的數(shù)據(jù)類型為 varchar(255),其默認值為 TRUE(不創(chuàng)建臨時文件)。如果設置為 true,則 SQL Server 禁止在 xp_readmail 閱讀帶附件郵件時創(chuàng)建臨時文件。如果設置為 false,則不禁止在閱讀帶附件郵件時創(chuàng)建臨時文件。
[@originator =] 'sender'
是返回的發(fā)件人郵件地址。sender 的數(shù)據(jù)類型為 varchar(255),無默認值。
[@subject =] 'subject'
是返回的郵件主題。subject 的數(shù)據(jù)類型為 varchar(255),無默認值。
[@message =] 'message'
是所返回郵件的正文或實際文本。message 的數(shù)據(jù)類型為 text,無默認值。
[@recipients =] 'recipients [;...n]'
是要返回的郵件的收件人列表,該列表以分號分隔。收件人名稱之間用分號 (;) 分隔。recipient_list 的數(shù)據(jù)類型為 varchar(255),無默認值。
[@cc_list =] 'copy_recipients [;...n]'
是要返回的郵件的復本收件人(抄送人)列表,該列表以分號分隔。收件人名稱之間用分號 (;) 分隔。cc_list 的數(shù)據(jù)類型為 varchar(255),無默認值。
[@bcc_list =] 'blind_copy_recipients [;...n]'
是要返回的郵件的密件復本收件人(密件抄送人)列表,該列表以分號分隔。收件人名稱之間用分號 (;) 分隔。bcc_list 的數(shù)據(jù)類型為 varchar(255),無默認值。
[@date_received =] 'date'
是郵件的返回日期。date 的數(shù)據(jù)類型為 varchar(255),無默認值。
[@unread =] 'unread_value'
郵件以前是未讀 (true) 還是已讀 (false) 的。unread_value 的數(shù)據(jù)類型為 varchar(5),其默認值為 TRUE。
[@attachments =] 'attachments [;...n]'
是返回的郵件附件臨時路徑的列表,該列表以分號分隔。臨時路徑以分號 (;) 分隔。attachments 的數(shù)據(jù)類型為 varchar(255),無默認值。
[@skip_bytes =] bytes_to_skip OUTPUT
如果輸入的值不為 0,則此參數(shù)指定在將郵件的下 255 個字節(jié)(最大字節(jié)數(shù))讀入 body of message 輸出參數(shù)之前要跳過的字節(jié)數(shù)。如果使用 bytes_to_skip,則 body_of_message 包含郵件的下一部分,并且 bytes_to_skip 返回郵件中的下一個起始點(前一 bytes_to_skip 加上 message 的長度)。bytes_to_skip 的數(shù)據(jù)類型為 int,其默認值為 0。
[@msg_length =] length_in_bytes OUTPUT
郵件的總長度(以字節(jié)為單位)。在存儲過程中與 bytes_to_skip 協(xié)同使用時,此參數(shù)允許以 255 個字節(jié)為單位閱讀郵件。length_in_bytes 的數(shù)據(jù)類型為 int,其默認值為 255(字節(jié))。
[@originator_address =] 'sender_address'
已解析的郵件發(fā)出人的郵件地址。sender_address 是 varchar(255),無默認值。
0(成功)或 1(失敗)
xp_readmail 返回包含下面這些列的結果集(較舊郵件首先出現(xiàn))。
| 列名 | 描述 |
|---|---|
| Originator | 電子郵件的發(fā)件人 |
| Date Received | 電子郵件的接收日期 |
| Recipients | 郵件的接收者 |
| CC List | 電子郵件"抄送"行中的人員 |
| BCC List | 電子郵件"密件抄送"行中的人員 |
| Subject | 電子郵件的主題行 |
| Message | 郵件的正文(文本) |
| Unread | 該郵件是否未讀 |
| Attachments | 郵件的任何附件 |
| Message ID | 郵件ID |
| Type | 郵件類型 |
除無效參數(shù)外的任何失敗均記入 Microsoft Windows NT® 應用程序日志。
使用 xp_readmail 有兩種方法:
若要將收件箱內容作為結果集返回客戶端,則應將 message_number 設置為 NULL 或不包含 message_number。在這種情況下,可使用 type 來閱讀特定的郵件??梢詫?peek 和 suppress_attach 指定為輸入?yún)?shù),以控制閱讀郵件的方式。
若要閱讀收件箱中的單封郵件,應將 xp_findnextmsg 所返回的有效 message_number 提供給 xp_readmail 作為輸入?yún)?shù)??梢詫?peek 和 suppress_attach 指定為輸入?yún)?shù),以控制閱讀郵件的方式。如果以這種方式使用 peek 和 suppress_attach,所有其它參數(shù)都是可選的輸出參數(shù),其中包含要閱讀的郵件中的特定信息。
通過執(zhí)行下面命令,可以查看將 xp_findnextmsg 用作 xp_readmail 的輸入?yún)?shù)的示例:
sp_helptext 'sp_processmail'
用于閱讀單封郵件時,xp_readmail 可以通過逐段閱讀的方式閱讀多于 255 個字節(jié)的郵件文本。使用 length_in_bytes 和 length_in_bytes 逐段閱讀多于 255 個字節(jié)的郵件文本。將 length_in_bytes 既作為輸入?yún)?shù)又作為輸出參數(shù),可以編寫循環(huán)代碼,以處理整個郵件的文本。下列代碼顯示了這種循環(huán)的示例(假定 message_number 設置為 xp_findnextmsg 所返回的有效郵件標識符)。
USE master
WHILE (1 = 1)
BEGIN
EXEC @status = xp_readmail @msg_id = @msg_id,
@message = @message OUTPUT,
@skip_bytes = @skip_bytes OUTPUT,
@msg_length = @msg_length OUTPUT
IF @status <> 0 BREAK
SELECT 'msg_id' = @msg_id, 'msg_part' = @message
IF @skip_bytes = @msg_length BREAK
END
xp_readmail 的執(zhí)行權限默認授予 master 數(shù)據(jù)庫中的 db_owner 固定數(shù)據(jù)庫角色成員以及 sysadmin 固定服務器角色成員,但可以授予其他用戶。
示例
下例在閱讀郵件時返回狀態(tài)。在下例中,xp_findnextmsg 所返回的郵件ID 放置于局部變量 @message_id 中并傳遞給 xp_readmail。
USE master
EXEC @status = xp_readmail @msg_id = @message_id,
@originator = @originator OUTPUT,
@cc_list = @cc_list OUTPUT,
@subject = @msgsubject OUTPUT,
@message = @query OUTPUT,
@peek = 'TRUE',
@suppress_attach = 'TRUE'
相關文章