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