【Vegas原创】SQL Server调用CDO发送邮件

 

•用于某事件过期mail提醒。


操作步骤:
  1.新建DailyJob,事件中填写:
       exec dbo.EIP_DeadLine_Notice
  2. 

/* ********************************************************************

*             Vegas Lee  制作       2006.01.17                       *

*********************************************************************
*/  
CREATE    PROCEDURE  dbo.EIP_DeadLine_Notice  AS
DECLARE    @mailTitle   nvarchar ( 100 ),  @mailBody   nvarchar ( 4000 ),  @theMailList   nvarchar ( 500 ), @C_mailBody   nvarchar ( 4000 )

--  项目到期时,系统自动发mail提醒==========================================
DECLARE  Cur_EIP_DeadLine   CURSOR   FOR
select  t.Unique_ID,m1.name  as  From_Name,t.Category,t.Name,t.DeadLine,t.Description,t.people,t.finish,m.mail,m1.mail  as  from_mail  from  todo t,members m,members m1  where   datediff (dd,t.DeadLine, getdate ()) < 1   and  t.finish = 0   and  t.people = m.Account_ID  and  m1.Account_ID = t.User_Account

Set   @C_mailBody = N ' <HTML>... '
Set   @C_mailBody =   @C_mailBody   + '<tr>... '
DECLARE   @v_Unique_ID   INT , @v_From_Name   VARCHAR ( 10 ), @v_Category   VARCHAR ( 10
DECLARE   @v_Name   VARCHAR ( 50 ), @v_DeadLine   nvarchar ( 20 ), @v_Description   VARCHAR ( 1000 ), @v_people   nvarchar ( 10 ), @v_finish   INT , @v_email   VARCHAR ( 100 ), @v_from_mail   VARCHAR ( 100 )


OPEN   Cur_EIP_DeadLine
FETCH  Cur_EIP_DeadLine
INTO   @v_Unique_ID , @v_From_Name , @v_Category , @v_Name , @v_DeadLine , @v_Description , @v_people , @v_finish , @v_email , @v_from_mail

WHILE  ( @@FETCH_STATUS   =   0 )
       
BEGIN
    
Set   @mailTitle = ' 系统通知: '  
    
Set   @mailBody   = ' <HTML>.. '  
    
Set   @C_mailBody =   @C_mailBody   +  '...'     
    
SET   @theMailList   =   rtrim ( @v_email )
    
    
    
EXEC  sp_send_cdosysmail  @v_from_mail , @theMailList , @mailTitle , @mailBody
    

FETCH  Cur_EIP_DeadLine  INTO   @v_Unique_ID , @v_From_Name , @v_Category , @v_Name , @v_DeadLine , @v_Description , @v_people , @v_finish , @v_email , @v_from_mail
        
END
    
CLOSE  Cur_EIP_DeadLine
DEALLOCATE  Cur_EIP_DeadLine

-- ---=====================通知
Set   @C_mailBody = @C_mailBody   +   ' </table></body></html> '

SET   @theMailList   =   @v_from_Mail
Exec  sp_send_cdosysmail_gb  @v_from_Mail , @theMailList , @mailTitle , @C_mailBody

GO

  3.  sp_send_cdosysmail_gb:



CREATE   PROCEDURE   [ dbo ] . [ sp_send_cdosysmail_gb ]  
   
@From   varchar ( 100 ) ,
   
@To   varchar ( 300 ) ,
   
@Subject   varchar ( 100 ) = " ",
   
@Body   nvarchar ( 4000 = " "
   
-- @Body ntext
/*
********************************************************************

This stored procedure takes the above parameters and sends an e-mail. 
All of the mail configurations are hard-coded in the stored procedure. 
Comments are added to the stored procedure where necessary.
Reference to the CDOSYS objects are at the following MSDN Web site:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_messaging.asp

**********************************************************************
*/  
   
AS
   
Declare   @iMsg   int
   
Declare   @hr   int
   
Declare   @source   varchar ( 255 )
   
Declare   @description   varchar ( 500 )
   
Declare   @output   varchar ( 1000 )

-- ************* Create the CDO.Message Object ************************
    EXEC   @hr   =  sp_OACreate  ' CDO.Message ' @iMsg  OUT

-- ***************Configuring the Message Object ******************
--
 This is to configure a remote SMTP server.
--
 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp
    EXEC   @hr   =  sp_OASetProperty  @iMsg ' Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value ' , ' 2 '
--  This is to configure the Server Name or IP address. 
--
 Replace MailServerName by the name or IP of your SMTP Server.
    EXEC   @hr   =  sp_OASetProperty  @iMsg ' Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value ' '[Mailserver] '  

--  Save the configurations to the message object.
    EXEC   @hr   =  sp_OAMethod  @iMsg ' Configuration.Fields.Update ' null

--  Set the e-mail parameters.
    EXEC   @hr   =  sp_OASetProperty  @iMsg ' To ' @To
   
EXEC   @hr   =  sp_OASetProperty  @iMsg ' From ' @From
   
EXEC   @hr   =  sp_OASetProperty  @iMsg ' Subject ' @Subject

--  If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.
    EXEC   @hr   =  sp_OASetProperty  @iMsg ' HTMLBody ' @Body
   
EXEC   @hr   =  sp_OASetProperty  @iMsg ' HTMLBodyPart.Charset ' , ' gb2312 '  
   
EXEC   @hr   =  sp_OAMethod  @iMsg ' Send ' NULL

--  Sample error handling.
    IF   @hr   <> 0  
     
select   @hr
     
BEGIN
       
EXEC   @hr   =  sp_OAGetErrorInfo  NULL @source  OUT,  @description  OUT
       
IF   @hr   =   0
         
BEGIN
           
SELECT   @output   =   '   Source:  '   +   @source
           
PRINT    @output
           
SELECT   @output   =   '   Description:  '   +   @description
           
PRINT    @output
         
END
       
ELSE
         
BEGIN
           
PRINT   '   sp_OAGetErrorInfo failed. '
           
RETURN
         
END
     
END

--  Do some error handling after each step if you need to.
--
 Clean up the objects created.
    EXEC   @hr   =  sp_OADestroy  @iMsg


GO
 
sp_send_cdosysmail(big5)


CREATE   PROCEDURE   [ dbo ] . [ sp_send_cdosysmail ]  
   
@From   varchar ( 100 ) ,
   
@To   varchar ( 300 ) ,
   
@Subject   varchar ( 100 ) = " ",
   
@Body   nvarchar ( 4000 = " "
   
-- @Body ntext
/*
********************************************************************

This stored procedure takes the above parameters and sends an e-mail. 
All of the mail configurations are hard-coded in the stored procedure. 
Comments are added to the stored procedure where necessary.
Reference to the CDOSYS objects are at the following MSDN Web site:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_messaging.asp

**********************************************************************
*/  
   
AS
   
Declare   @iMsg   int
   
Declare   @hr   int
   
Declare   @source   varchar ( 255 )
   
Declare   @description   varchar ( 500 )
   
Declare   @output   varchar ( 1000 )

-- ************* Create the CDO.Message Object ************************
    EXEC   @hr   =  sp_OACreate  ' CDO.Message ' @iMsg  OUT

-- ***************Configuring the Message Object ******************
--
 This is to configure a remote SMTP server.
--
 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp
    EXEC   @hr   =  sp_OASetProperty  @iMsg ' Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value ' , ' 2 '
--  This is to configure the Server Name or IP address. 
--
 Replace MailServerName by the name or IP of your SMTP Server.
    EXEC   @hr   =  sp_OASetProperty  @iMsg ' Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value ' '[MailServer]'

--  Save the configurations to the message object.
    EXEC   @hr   =  sp_OAMethod  @iMsg ' Configuration.Fields.Update ' null

--  Set the e-mail parameters.
    EXEC   @hr   =  sp_OASetProperty  @iMsg ' To ' @To
   
EXEC   @hr   =  sp_OASetProperty  @iMsg ' From ' @From
   
EXEC   @hr   =  sp_OASetProperty  @iMsg ' Subject ' @Subject

--  If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.
    EXEC   @hr   =  sp_OASetProperty  @iMsg ' HTMLBody ' @Body
   
-- EXEC @hr = sp_OASetProperty @iMsg, 'HTMLBodyPart.Charset','utf8' 
    EXEC   @hr   =  sp_OAMethod  @iMsg ' Send ' NULL

--  Sample error handling.
    IF   @hr   <> 0  
     
select   @hr
     
BEGIN
       
EXEC   @hr   =  sp_OAGetErrorInfo  NULL @source  OUT,  @description  OUT
       
IF   @hr   =   0
         
BEGIN
           
SELECT   @output   =   '   Source:  '   +   @source
           
PRINT    @output
           
SELECT   @output   =   '   Description:  '   +   @description
           
PRINT    @output
         
END
       
ELSE
         
BEGIN
           
PRINT   '   sp_OAGetErrorInfo failed. '
           
RETURN
         
END
     
END

--  Do some error handling after each step if you need to.
--
 Clean up the objects created.
    EXEC   @hr   =  sp_OADestroy  @iMsg

GO

 4.查询ole automation procedures.txt

sp_configure 
' show advanced options ' 1 ;
GO
RECONFIGURE ;
GO
sp_configure 
' Ole Automation Procedures ' 1 ;
GO
RECONFIGURE ;
GO


-- -查询状态 
EXEC  sp_configure  ' Ole Automation Procedures ' ;
GO

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值