首页 > 代码库 > 基于SQL调用Com组件来发送邮件
基于SQL调用Com组件来发送邮件
这个需求是公司有个文控中心,如果有用增删改了文件信息希望可以发邮件通知到有权限的人。当然方式很多。
这里是用数据库作业来完成
JOB+Com,这里用的com组件是Jmail
当然你需要把com组件放到system32下面
下面是实现方式
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | CREATE PROC dbo.dcc_Send_Email AS BEGIN SET NOCOUNT ON DECLARE @lasttime DATETIME --获取最后一次发送的时间 IF Not EXISTS( SELECT lastsendtime FROM dcc_lastsend) begin set @lasttime=GETDATE() END ELSE BEGIN SELECT @lasttime=lastsendtime FROM dcc_lastsend END --SELECT @lasttime --SELECT * FROM dcc_changereaon WHERE createdate>=@lasttime DECLARE @sendto VARCHAR (500) --发送邮件给谁 DECLARE @aliasname VARCHAR (500) --档案名称 DECLARE @filename VARCHAR (500) --名称 DECLARE @userid INT --用户ID DECLARE @dccid INT --文件夹ID DECLARE @dccfileid INT --文件ID DECLARE @ action VARCHAR (500) --操作类型 1 新增 2 修改 3删除 DECLARE @changeid int DECLARE @reasons VARCHAR (8000) --原因 DECLARE @html VARCHAR (8000) ---html格式内容 DECLARE @ table VARCHAR (8000) ---html格式内容 DECLARE @senduiserid VARCHAR (8000) --通知的用户 DECLARE @sendfileid VARCHAR (8000) --更改的文件用户 DECLARE @ temp TABLE (id INT , ACTION varchar (50), aliasname varchar (50),FILENAME varchar (50)) DECLARE @rcount INT SET @html= ‘‘ -- SET @ table = ‘‘ DECLARE @ index INT --奇数还是偶数行 SET @ index =0 DECLARE CusCursor CURSOR FOR --外层游标查询用户 SELECT id,DccMail FROM view_dcc_users WHERE DccMail<> ‘‘ AND IsLock=0 OPEN CusCursor FETCH NEXT FROM CusCursor INTO @userid,@sendto WHILE (@@FETCH_STATUS = 0) BEGIN SET @ table = ‘‘ SET @ index =0 SET @html = ‘‘ SET @rcount=0 DELETE @ temp INSERT INTO @ temp (id, action ,aliasname,filename) SELECT a.id,[ action ],a.aliasname,a.filename FROM dcc_changereaon a WHERE a.createdate>=@lasttime AND dccid IN ( SELECT folderid FROM dbo.dcc_rights WHERE userid=@userid AND enabled=1) SET @rcount = @@ROWCOUNT IF @rcount>0 BEGIN DECLARE cur CURSOR FOR SELECT * FROM @ temp --内层游标查询用户有那些权限 OPEN cur SET @html= ‘<html><head><style type="text/css">table{font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;width:100%;border-collapse:collapse;}td,th{font-size:1em;border:1px solid #98bf21;padding:3px 7px 2px 7px;}th {font-size:1.1em;text-align:left;padding-top:5px;padding-bottom:4px;background-color:#A7C942;color:#ffffff;}tr.alt td {color:#000000;background-color:#EAF2D3;}</style></head><body>各位:<br>兹通知下述文件有变动,贵部可随时登录文控网页(www.gardenchinagroup.com:82) 查阅:<br><br><br><table><tr><th>档案名称</th><th>名称</th><th>备注(标注新增/更新/取消)</th></tr>‘ FETCH NEXT FROM cur INTO @changeid,@ action ,@aliasname,@filename WHILE (@@FETCH_STATUS = 0) BEGIN INSERT INTO dbo.dcc_logs ( changeid, userid, createtime ) VALUES ( @changeid, -- changeid - int @userid, -- userid - int GETDATE() -- createtime - smalldatetime ) IF @ index %2<>0 SET @ table =@ table + ‘<tr class=‘ ‘alt‘ ‘><td>‘ +@filename+ ‘</td><td>‘ +@aliasname+ ‘</td><td>‘ +@ action + ‘</td></tr>‘ ELSE SET @ table =@ table + ‘<tr><td>‘ +@filename+ ‘</td><td>‘ +@aliasname+ ‘</td><td>‘ +@ action + ‘</td></tr>‘ SET @ index =@ index +1 fetch next from cur into @changeid,@ action ,@aliasname,@filename END CLOSE cur DEALLOCATE cur SET @html=@html+@ table + ‘</table></body></html>‘ --PRINT @sendto EXEC myCommData.dbo.my_SendMail ‘文件新增/更新/取消通知‘ ,@html, ‘DCC‘ ,@sendto, ‘‘ , ‘fengmin.dg@gardenchinagroup.com,foxbuilder.dg@gardenchinagroup.com‘ , ‘joey.dg@gardenchinagroup.com‘ ,1 END --SELECT @html FETCH NEXT FROM CusCursor INTO @userid,@sendto END CLOSE CusCursor DEALLOCATE CusCursor IF Not EXISTS( SELECT lastsendtime FROM dcc_lastsend) --更新最后一次发送时间 begin INSERT INTO dbo.dcc_lastsend( lastsendtime ) VALUES (GETDATE()) END ELSE BEGIN UPDATE dcc_lastsend SET lastsendtime=GETDATE() END END GO |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。