• 相关软件
    >xp_readmail 创建者:webmaster 更新时间:2006-02-16 15:51

    阅读 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,则忽略输入的 typetype 的数据类型为 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_addressvarchar(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 来阅读特定的邮件。可以将 peeksuppress_attach 指定为输入参数,以控制阅读邮件的方式。



    若要阅读收件箱中的单封邮件,应将 xp_findnextmsg 所返回的有效 message_number 提供给 xp_readmail 作为输入参数。可以将 peeksuppress_attach 指定为输入参数,以控制阅读邮件的方式。如果以这种方式使用 peeksuppress_attach,所有其它参数都是可选的输出参数,其中包含要阅读的邮件中的特定信息。



    通过执行下面命令,可以查看将 xp_findnextmsg 用作 xp_readmail 的输入参数的示例:



    sp_helptext 'sp_processmail'


    用于阅读单封邮件时,xp_readmail 可以通过逐段阅读的方式阅读多于 255 个字节的邮件文本。使用 length_in_byteslength_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'
    相关文章
    本页查看次数: