博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql邮件自动应答(转)
阅读量:2492 次
发布时间:2019-05-11

本文共 2961 字,大约阅读时间需要 9 分钟。

sqlmail可以收发邮件,可能好多人都有xp_sendmail发送过邮件,这里介绍一种邮件服务器接收邮件后,根据邮件内容(只能是查询语句) 把邮件中的查询语句执行后的结果以附件形式自动返回给发送邮件者。
eg:
发送邮件,邮件内容为: select top 10 id,name from sysobjects则服务器自动回复邮件,内容为上述查询语句的执行结果,以附件形式发送。
1:当然是先配置好sql邮件服务了,这方面的资料比较多,此处不赘述。
2: 把sp_processmail稍作修改 (把发件人的邮件地址解析为真正的邮箱地址)
alter procedure sp_processmail
@subject varchar(255)=null,
@filetype varchar(3)=’txt’,
@separator varchar(3)=’tab’,
@set_user varchar(132)=’guest’,
@dbuse varchar(132)=’master’
as
declare @status int
declare @msg_id varchar(64)
declare @originator varchar(255)
declare @originator_address varchar(255)
declare @a varchar(255)
declare @cc_list varchar(255)
declare @msgsubject varchar(255)
declare @query varchar(8000)
declare @messages int
declare @mapifailure int
declare @resultmsg varchar(80)
declare @filename varchar(12)
declare @current_msg varchar(64)
select @messages=0
select @mapifailure=0
if @separator=’tab’ select @separator=char(9)
/* get first message id */
exec @status = master.dbo.xp_findnextmsg
@msg_id=@msg_id output,
@unread_only=’true’
if @status <> 0
select @mapifailure=1
while (@mapifailure=0)
begin
if @msg_id is null break
if @msg_id = ’’ break
exec @status = master.dbo.xp_readmail
@msg_id=@msg_id,
@originator=@originator output,
@cc_list=@cc_list output,
@subject=@msgsubject output,
@message=@query output,
@peek=’true’,
@originator_address= @originator_address output,
@suppress_attach=’true’
if @status <> 0
begin
select @mapifailure=1
break
end
/* get new message id before processing & deleting current */
select @current_msg=@msg_id
exec @status = master.dbo.xp_findnextmsg
@msg_id=@msg_id output,
@unread_only=’true’
if @status <> 0
begin
select @mapifailure=1
end
if ((@subject is null) or (@subject=@msgsubject))
begin
/* generate random filename */
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=’query results’,
@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
exec master.dbo.xp_deletemail @current_msg
end /* end of xp_sendmail block */
end /* end of xp_findnextmsg loop */
/* finished examining the contents of inbox; now send results */
if @mapifailure=1
begin
raiserror(15079,-1,-1,@messages)
return(1)
end
else
return(0)
-- sp_processmail
3:在master数据库下建一个存储过程
use master
create proc answermail
as
sp_processmail @subject = ’ ’,@filetype = ’csv’,@separator =’,’,@set_user = ’dbo’ ,@dbuse = ’数据库名’
4: 用job调度此存储过程。
5: 现在可以测试了。发一封邮件给服务器上配置的邮箱地址。
主题为
内容为 一句简单的查询语句 eg: select getdate()
发送
6: 等到job调度时间到后即可收到回复。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-122605/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-122605/

你可能感兴趣的文章
状态机的两种写法 分类: 生活百科 2014-...
查看>>
UDLD(Unidirectional Link Detection)
查看>>
[大数据]-Fscrawler导入文件(txt,html,pdf,worf...)到Elasticsearch5.3.1并配置同义词过滤...
查看>>
Java基础---网络编程
查看>>
JSONNull
查看>>
cojs 香蕉 解题报告
查看>>
Idea实现WebService实例 转
查看>>
springmvc框架
查看>>
Ninject使用demo
查看>>
tips about python
查看>>
个人进度(04)
查看>>
PHP生成缩略图函数
查看>>
前端开发规范文档(html,css,js)
查看>>
Django:序列化的几种方法
查看>>
css新奇技术及其未来发展
查看>>
『重构--改善既有代码的设计』读书笔记----序
查看>>
[ZJOI2007] 时态同步
查看>>
部署好网站,同局域网中电脑无法访问的问题的解决方案
查看>>
leetcode第一刷_Binary Tree Zigzag Level Order Traversal
查看>>
php对二维数据进行排序
查看>>