SQL邮件自动应答(根据收到的邮件中的查询语句回复语句执行结果)

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

SQLMail可以收发邮件,可能好多人都有xp_sendmail发送过邮件,
这里介绍一种邮件服务器接收邮件后,根据邮件内容(只能是查询语句)
邮件中的查询语句执行后的结果以附件形式自动返回给发送邮件者。

eg:
发送邮件,邮件内容为:selecttop10id,namefromsysobjects
则服务器自动回复邮件,内容为上述查询语句的执行结果,以附件形式发送。


1:当然是先配置好SQL邮件服务了,这方面的资料比较多,此处不赘述。

2:把sp_processmail稍作修改(把发件人的邮件地址解析为真正的邮箱地址)

Alterproceduresp_processmail
 @subjectvarchar(255)=NULL, 
 @filetypevarchar(3)='txt', 
 @separatorvarchar(3)='tab', 
 @set_uservarchar(132)='guest', 
 @dbusevarchar(132)='master' 
as 
 
declare@statusint 
declare@msg_idvarchar(64) 
declare@originatorvarchar(255) 
declare@originator_addressvarchar(255) 
declare@avarchar(255)

declare@cc_listvarchar(255) 
declare@msgsubjectvarchar(255) 
declare@queryvarchar(8000) 
declare@messagesint 
declare@mapifailureint 
declare@resultmsgvarchar(80) 
declare@filenamevarchar(12) 
declare@current_msgvarchar(64) 
 
select@messages=0 
select@mapifailure=0 
 
if@separator='tab'select@separator=CHAR(9) 
 
/*getfirstmessageid*/ 
exec@status=master.dbo.xp_findnextmsg 
 @msg_id=@msg_idoutput, 
 @unread_only='true' 
 
if@status<>0 
 select@mapifailure=1 
 
while(@mapifailure=0) 
 begin 
 
   if@msg_idisnullbreak 
   if@msg_id=''break 
 
   exec@status=master.dbo.xp_readmail 
 @msg_id=@msg_id, 
 @originator=@originatoroutput, 
 @cc_list=@cc_listoutput, 
 @subject=@msgsubjectoutput, 
 @message=@queryoutput, 
 @peek='true', 
 @originator_address=@originator_addressoutput,
 @suppress_attach='true' 
 
   if@status<>0 
 begin 
 select@mapifailure=1 
 break 
 end 
 
   /*getnewmessageidbeforeprocessing&deletingcurrent*/ 
 select@current_msg=@msg_id 
 exec@status=master.dbo.xp_findnextmsg 
 @msg_id=@msg_idoutput, 
 @unread_only='true' 
 
    if@status<>0 
 begin 
 select@mapifailure=1 
 end 
 
 
   if((@subjectISNULL)OR(@subject=@msgsubject)) 
   begin 
 /*generaterandomfilename*/ 
 select@filename='SQL'+convert(varchar,ROUND(RAND()*100000,0))+'.'+@filetype 
 
 exec@status=master.dbo.xp_sendmail 
--  @recipients=@originator, 
  @recipients=@originator_address, 
  @copy_recipients=@cc_list, 共2页  1 
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
阅读更多
个人分类: 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭