This Domain(Admin5.com) is for Sale:

SQL邮件自动应答

时间:2007-12-23  来源:不详  作者:迈克DB
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) 内容来自dedecms
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 内容来自dedecms
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,
@message=@query,
@query=@query,
@subject=’QueryResults’,
@separator=@separator,
@width=256,
@attachments=@filename,
@attach_results=’true’,
@no_output=’false’,
@echo_error=’true’,
@set_user=@set_user,
@dbuse=@dbuse

if@status<>0
begin
select@mapifailure=1
break
end

select@messages=@messages 1

execmaster.dbo.xp_deletemail@current_msg

end/*endofxp_sendmailblock*/
end/*endofxp_findnextmsgloop*/

/*finishedexaminingthecontentsofinbox;nowsendresults*/
if@mapifailure=1
begin
raiserror(15079,-1,-1,@messages)
return(1)

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息