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

    使用扩展存储过程(xp_findnextmsgxp_readmailxp_deletemail)处理 Microsoft® SQL Server™ 收件箱中收到的邮件(应只有单个查询)。SQL Server 用 xp_sendmail 扩展存储过程向邮件发送者返回结果集。



    语法


    sp_processmail [ [ @subject = ] 'subject' ]

        [ , [ @filetype = ] 'filetype' ]

        [ , [ @separator = ] 'separator' ]

        [ , [ @set_user = ] 'user' ]

        
    [ , [ @dbuse = ] 'dbname' ]



    参数


    [@subject =] 'subject'



    是邮件的主题行,该行将解释为 SQL Server 查询。subjectvarchar(255) 类型,其默认值为 NULL。若指定此参数,sp_processmail 将只处理有此主题的邮件。默认情况下,SQL Server 象处理查询一样处理所有邮件。



    [@filetype =] 'filetype'



    是将结果集文件发送回邮件发送者时使用的文件扩展名。filetypevarchar(3) 类型,其默认值为 txt。



    [@separator =] 'separator'



    是结果集中每列的列分隔符(字段终止符)。这一信息将传递给扩展存储过程 xp_sendmail 以向邮件发送者返回结果集。separatorvarchar(3) 类型,其默认值为 tab,表示在各列之间使用制表符的特殊情况。



    [@set_user =] 'user'



    是应在其中运行查询的安全上下文。user 的数据类型为 sysname。如果没有指定 user,则安全上下文默认授予执行 xp_sendmail 的用户。



    [@dbuse =] 'dbname'



    是查询应运行于其中的数据库上下文。dbnamesysname 类型,其默认值为 master



    返回代码值


    0(成功)或 1(失败)



    结果集




    注释


    外来电子邮件应以一个单独的有效 SQL Server 查询作为其邮件正文。查询的结果将返回给邮件发件人,并抄送给抄送列表中的所有电子邮件用户。邮件经过处理后,将从收件箱中删除。如果时常有电子邮件发送给服务器,就应经常运行 sp_processmail。若要设置定期的电子邮件处理,可使用 SQL Server 代理程序来调度 sp_processmail 作业。这样,邮件将按指定的频率处理,并在作业历史记录中记录信息性消息,其中包含已处理的查询数目。



    返回结果将作为附件文件发送。所发送文件的完整文件名由 Sql 后加随机数字字符串构成,然后是指定的扩展名(文件类型),例如 Sql356.txt。



    重要  若要在邮件中附加适当的图标,需确保文件类型的关联正确。若要创建文件关联,请双击桌面上的"我的电脑",然后选择"视图"菜单中的"选项"命令。在"选项"对话框中的"文件类型"选项卡上,指定用于打开文件的应用程序。



    处理查询时收到的错误通过邮件正文返回给邮件发送者。将结果集返回给客户端时,会调用 xp_sendmail,并将其参数 @echo_error 设为 true。所发送的邮件还会包括查询的行数(影响到的行数)。



    可为不同数据库中的查询设置不同的 sp_processmail 作业。例如,可采用这样的约定:对数据库 pubs 的查询的主题必须为 SQL:pubs。然后,可运行 sp_processmail,并使用参数 subject = SQL:pubsdbname = pubs。其它数据库查询和分组可有其它格式化的结构。例如,分发任务可有 subject = SQL:distributiondbname = distribution。任何这些任务均可以是 SQL Server 代理程序调度的作业。



    也可以按许多方式自定义 sp_processmail 系统存储过程,方法是用 sp_helptext 系统存储过程检索该过程的正文,然后修改其 Transact-SQL 代码。可能的更改包括:


    • 使用参数 @type 调用 xp_readmail 扩展存储过程以只处理特定的自定义邮件类型。



    • 将邮件标记为 read,但处理后不删除邮件(第二次执行 xp_readmail 并将 peek 设为 false)。



    • 通过调用 xp_sendmail 并将其参数 attach_result 设置为 false,以在电子邮件正文中发送查询结果。



    • 设置安全上下文,以在基于邮件发送者的用户上下文中运行查询。如果电子邮件用户名与 SQL Server 用户名相同,那么此更改非常简单,只需在调用 xp_sendmail 时使用 set_user = @originator。如果邮件用户名不是有效的 SQL Server 用户名(例如,如果其中包含嵌入式空格),则可以通过使用对照表或字符替换来得到适当的 SQL Server 用户名以发送给 xp_sendmail



    权限


    只有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员可执行此过程。



    示例


    下面的示例处理 pubs 数据库中的所有邮件,并将结果集以 CSV(逗号分隔的值)格式返回给客户端。



    sp_processmail @filetype = 'CSV', @separator = ',', @dbuse = 'pubs'
    相关文章
    本页查看次数: