阅读 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 的数据类型为 varchar(255),无默认值。
'type'
是基于以下 MAPI 邮件定义返回的邮件类型:
IP[M | C].Vendorname.subclass
如果用于输入,则此参数必须定义特定邮件的类型;如果 message_number 为 NULL,则忽略输入的 type。type 的数据类型为 varchar(255),其默认值为 NULL。
OUTPUT
如果指定,则将指定参数值置于输出参数中。
[@peek =] 'peek'
是否 SQL Server 返回邮件而不更改要阅读邮件的状态。peek 的数据类型为 varchar(5),其默认值为 FALSE。如果设置为 false,则将邮件视为"已读"。如果设置为 true,则将邮件视为"未读"。
[@suppress_attach =] 'suppress_attach'
是否忽略邮件附件。suppress_attach 的数据类型为 varchar(255),其默认值为 TRUE(不创建临时文件)。如果设置为 true,则 SQL Server 禁止在 xp_readmail 阅读带附件邮件时创建临时文件。如果设置为 false,则不禁止在阅读带附件邮件时创建临时文件。
[@originator =] 'sender'
是返回的发件人邮件地址。sender 的数据类型为 varchar(255),无默认值。
[@subject =] 'subject'
是返回的邮件主题。subject 的数据类型为 varchar(255),无默认值。
[@message =] 'message'
是所返回邮件的正文或实际文本。message 的数据类型为 text,无默认值。
[@recipients =] 'recipients [;...n]'
是要返回的邮件的收件人列表,该列表以分号分隔。收件人名称之间用分号 (;) 分隔。recipient_list 的数据类型为 varchar(255),无默认值。
[@cc_list =] 'copy_recipients [;...n]'
是要返回的邮件的复本收件人(抄送人)列表,该列表以分号分隔。收件人名称之间用分号 (;) 分隔。cc_list 的数据类型为 varchar(255),无默认值。
[@bcc_list =] 'blind_copy_recipients [;...n]'
是要返回的邮件的密件复本收件人(密件抄送人)列表,该列表以分号分隔。收件人名称之间用分号 (;) 分隔。bcc_list 的数据类型为 varchar(255),无默认值。
[@date_received =] 'date'
是邮件的返回日期。date 的数据类型为 varchar(255),无默认值。
[@unread =] 'unread_value'
邮件以前是未读 (true) 还是已读 (false) 的。unread_value 的数据类型为 varchar(5),其默认值为 TRUE。
[@attachments =] 'attachments [;...n]'
是返回的邮件附件临时路径的列表,该列表以分号分隔。临时路径以分号 (;) 分隔。attachments 的数据类型为 varchar(255),无默认值。
[@skip_bytes =] bytes_to_skip OUTPUT
如果输入的值不为 0,则此参数指定在将邮件的下 255 个字节(最大字节数)读入 body of message 输出参数之前要跳过的字节数。如果使用 bytes_to_skip,则 body_of_message 包含邮件的下一部分,并且 bytes_to_skip 返回邮件中的下一个起始点(前一 bytes_to_skip 加上 message 的长度)。bytes_to_skip 的数据类型为 int,其默认值为 0。
[@msg_length =] length_in_bytes OUTPUT
邮件的总长度(以字节为单位)。在存储过程中与 bytes_to_skip 协同使用时,此参数允许以 255 个字节为单位阅读邮件。length_in_bytes 的数据类型为 int,其默认值为 255(字节)。
[@originator_address =] 'sender_address'
已解析的邮件发出人的邮件地址。sender_address 是 varchar(255),无默认值。
0(成功)或 1(失败)
xp_readmail 返回包含下面这些列的结果集(较旧邮件首先出现)。
列名 | 描述 |
---|---|
Originator | 电子邮件的发件人 |
Date Received | 电子邮件的接收日期 |
Recipients | 邮件的接收者 |
CC List | 电子邮件"抄送"行中的人员 |
BCC List | 电子邮件"密件抄送"行中的人员 |
Subject | 电子邮件的主题行 |
Message | 邮件的正文(文本) |
Unread | 该邮件是否未读 |
Attachments | 邮件的任何附件 |
Message ID | 邮件ID |
Type | 邮件类型 |
除无效参数外的任何失败均记入 Microsoft Windows NT® 应用程序日志。
使用 xp_readmail 有两种方法:
若要将收件箱内容作为结果集返回客户端,则应将 message_number 设置为 NULL 或不包含 message_number。在这种情况下,可使用 type 来阅读特定的邮件。可以将 peek 和 suppress_attach 指定为输入参数,以控制阅读邮件的方式。
若要阅读收件箱中的单封邮件,应将 xp_findnextmsg 所返回的有效 message_number 提供给 xp_readmail 作为输入参数。可以将 peek 和 suppress_attach 指定为输入参数,以控制阅读邮件的方式。如果以这种方式使用 peek 和 suppress_attach,所有其它参数都是可选的输出参数,其中包含要阅读的邮件中的特定信息。
通过执行下面命令,可以查看将 xp_findnextmsg 用作 xp_readmail 的输入参数的示例:
sp_helptext 'sp_processmail'
用于阅读单封邮件时,xp_readmail 可以通过逐段阅读的方式阅读多于 255 个字节的邮件文本。使用 length_in_bytes 和 length_in_bytes 逐段阅读多于 255 个字节的邮件文本。将 length_in_bytes 既作为输入参数又作为输出参数,可以编写循环代码,以处理整个邮件的文本。下列代码显示了这种循环的示例(假定 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 的执行权限默认授予 master 数据库中的 db_owner 固定数据库角色成员以及 sysadmin 固定服务器角色成员,但可以授予其他用户。
示例
下例在阅读邮件时返回状态。在下例中,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'
相关文章