`
yin_jw
  • 浏览: 49317 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

sqlserver2000利用存储过程发邮件

阅读更多

业务逻辑

alter proc exec_sendmail1
@appname varchar(100), --申请人
@guid varchar(100),    --表单guid
@id varchar(100),      --表单编号
@title varchar(500)    --邮件标题
as

declare @from varchar(500)  --发件箱
declare @smtpserver varchar(200) --smtp服务器
declare @sendusername varchar(200) --发送认证:用户名
declare @sendpassword varchar(200) --发送认证:密码 
declare @content varchar(2000) --邮件内容

select @from = 'OA_SANYO@sanyo.com'
select @smtpserver = '10.25.21.51'
select @sendusername = 'OA_SANYO@sanyo.com'
select @sendpassword = '20369845'
select @content = @appname+'提交的'+@title+'('+@id+')'+',审核不通过,已回退,请知晓!'

--判断是否为空
if @appname = '' or  @guid = '' or @id = '' or @title = ''
begin  
  raiserror 50000 'please set the @appname and  @guid and @id and @title values before excute the stored procedure'  
  return -1  
end

--动态设定查询行数
declare @count int
set @count = ((select count(*) from sys_inst_prcs 
              where taskid = @guid 
              and prc_id >= 
              (
                select top 1 prc_id from sys_inst_prcs 
                where selactname = 0 
                and taskid = @guid 
                and procuser is not null 
                order by prc_id desc
              ))-1)
print @count
--创建临时表
create table #temp(name varchar(50))

--申明游标往临时表中插值
set rowcount @count  --限制循环次数为count
declare tempCursor cursor 
for
  select procuser from sys_inst_prcs 
  where taskid = @guid 
    and prc_id >= 
    (
      select top 1 prc_id from sys_inst_prcs 
      where selactname = 0 
      and taskid = @guid  
      and procuser is not null 
      order by prc_id desc
    ) 

open tempCursor
declare @name varchar(50) --收件人
fetch next from tempCursor into @name
while @@fetch_status=0
begin

--向临时表中插数据
insert into #temp(name) values(@name)
fetch next from tempCursor into @name
end
close tempCursor
deallocate tempCursor

--声明游标发邮件
declare sendMailCursor cursor
for
  select distinct(name) from #temp 
  
open sendMailCursor
declare @receiptant varchar(50) --收件人
declare @to varchar(500) --收件箱

fetch next from sendMailCursor into @receiptant
while @@fetch_status=0
begin
--调用存储过程send_mail发邮件
set @to = (select email from sys_user where username = @receiptant)
exec send_mail @from=@from, @to = @to,@smtpserver = @smtpserver,@sendusername = @sendusername,@sendpassword = @sendpassword,@subject = @title,@body = @content
fetch next from sendMailCursor into @receiptant
end
close sendMailCursor
deallocate sendMailCursor

go


exec exec_sendmail1 '陆宁','dad42bed-73c3-48aa-ab06-7962b335f0ff','NJSQ11060805383','年假申请表单'

执行过程:当审批不同意时,查询出前面审批过的人的邮箱,利用游标循环查询结果,调用存储过程发送邮件给已经审批过的人,通知申请表单已经回退

参考链接:

http://chenxing.blog.51cto.com/240526/44621


执行发邮件

ALTER PROCEDURE [dbo].[send_mail]  
   @From varchar(1000) ='',  --发件人  
   @To varchar(1000) ,   --收件人  
   @smtpserver varchar(200),--smtp服务器
   @sendusername varchar(200),--发送认证:用户名
   @sendpassword varchar(200),--发送认证:密码 
   @Subject nvarchar(128)='', --标题  
   @Body nvarchar(4000) ='' --正文  
   with encryption  
      
   /*********************************************************************  
      
   This stored procedure takes the parameters and sends an e-mail.  
   All the mail configurations are hard-coded in the stored procedure.  
   Comments are added to the stored procedure where necessary.  
   References 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)     
    
  if @sendusername='' or  @sendpassword=''  
  begin  
   raiserror 50000 'please set the @sendusername and  @sendpassword values before excute the stored procedure'  
   return -1  
  end     
  --replace the quotation marks  
  set @Subject=replace(@Subject,'''','''''')  
  set @Body=replace(@Body,'''','''''')     
  --************* 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', @smtpserver  
  --这个需要注意:如果不将其值设为0,会报错,不知道为什么  
  EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value','0'     
  EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusername").Value', @sendusername  
  EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value', @sendpassword  
     
  -- 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  
  --选择了HTMLBody格式,就必须设置HTMLBodyPart,否则会出现乱码
  EXEC @hr = sp_OASetProperty @IMsg, 'HTMLBodyPart.Charset', 'gb2312'
  EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL  
     
  if @@error<>0 or @hr<>0  
  begin  
   raiserror 55000 '<send_mail> Error: send mail failed.'  
  end  
  else   
  begin  
   print 'Success: send mail ok.'  
  end  
     
  EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT  
  IF @hr = 0  
  BEGIN  
   SELECT @output = '<send_mail> Error Source: ' + @source  
   PRINT  @output  
   SELECT @output = '<send_mail> Error Description: ' + @description  
   PRINT  @output  
  END  
  ELSE  
  BEGIN  
   PRINT '  sp_OAGetErrorInfo failed.'  
   RETURN  
  END  
    
  -- Do some error handling after each step if you have to.  
  -- Clean up the objects created.  
  EXEC @hr = sp_OADestroy @iMsg  
   
  GO  
 

参考链接:

http://topic.csdn.net/u/20100322/15/59f780a9-1a7a-4974-a830-7d80d3e90648.html

http://www.cnblogs.com/NeoLee/archive/2005/03/28/127316.html

分享到:
评论

相关推荐

    使用SQL存储过程发送邮件

    本篇文章将详细介绍如何利用SQL Server中的存储过程实现发送邮件的功能,这对于需要进行自动化通知、提醒等应用场景具有重要的意义。 #### 1. 存储过程简介 存储过程是SQL Server中一种重要的编程对象,它是由一...

    在SQL SERVER中利用扩展存储过程发送电子邮件.pdf

    总的来说,利用SQL Server的扩展存储过程和Windows组件发送电子邮件提供了一种简单、灵活且不依赖外部邮件服务器的解决方案,特别适合在SQL Server的作业和警报中实现自动化邮件通知。这种方式减少了系统资源的占用...

    SQL Server 2000试题汇编

    1. 数据库概念:理解数据库的基本概念,如表、视图、索引、存储过程等,以及它们在SQL Server 2000中的实现。 2. T-SQL语言:学习并熟练运用Transact-SQL(T-SQL)进行数据查询、更新、插入和删除操作,以及创建和...

    sqlserver数据库使用存储过程和dbmail实现定时发送邮件

    本文主要讨论如何利用存储过程和SQL Server Agent(SQL Server代理)的Job功能来实现定时发送邮件。存储过程是预编译的SQL语句集合,可以包含复杂的逻辑和控制流程,非常适合执行定期任务。在SQL Server中,`sp_send...

    SqlServer2005配置数据库邮件

    ### SqlServer2005配置数据库邮件 #### 一、引言 随着信息技术的发展与企业需求的提升,高效地监控信息系统变得尤为重要。SQL Server 2005作为一款功能强大的数据库管理系统,提供了多种用于增强系统监控及自动化...

    SQL Server 2005技术数据库邮件使用方式

    `sp_send_dbmail`是SQL Server内置的存储过程,用于发送邮件。以下是一个基本的使用示例: ```sql EXEC msdb.dbo.sp_send_dbmail @profile_name = 'YourProfileName', @recipients = 'recipient@example.com', @...

    SQLserver2005下载X64

    在"SQL Server x64"这个文件中,包含的是64位版本的安装程序,安装后你可以创建数据库、设计表结构、编写SQL查询,实现数据的增删改查,以及利用视图、索引、存储过程等功能提高数据处理效率。同时,SQL Server 2005...

    简易邮件系统(jsp+sql server2000)

    该系统利用了Java Server Pages (JSP) 技术作为前端展示,结合SQL Server 2000数据库进行数据存储,实现了基本的邮件收发、管理等功能。 在JSP技术方面,这个系统展示了如何在Web应用中使用Java代码来处理用户请求...

    基于SQL Server 2000的个人通讯录

    2. **ODBC连接**:利用MFC中的`CDaoDatabase`和`CDaoTableDef`类,通过ODBC驱动程序连接到SQL Server 2000,建立数据库连接。 3. **数据操作**:使用MFC的DAO类进行CRUD(Create、Read、Update、Delete)操作。例如...

    MS SQL SERVER 2005数据库邮件配置详细步骤图解

    打开“配置工具”-&gt;“SQL Server 2005外围应用配置器”,选择“应用实例”的“数据库邮件”,然后启用“数据库邮件存储过程”。 第四步是具体配置数据库邮件。在Microsoft SQL Server Management Studio中,通过...

    SQLServer2005_SSMSEE_x64.rar

    标题中的"SQLServer2005_SSMSEE_x64.rar"表明这是一个关于Microsoft SQL Server 2005的管理工具,特别指出是64位版本,并且是压缩包文件。描述中的“2005 管理工具”进一步确认了这个文件是用于管理和维护SQL Server...

    SQL Server常用存储过程及示例

    在SQL Server中,存储过程是预编译的SQL语句集合,它们允许开发人员封装复杂的逻辑,提高数据库操作的效率和安全性。...通过合理利用存储过程,可以优化性能、增强安全性,同时简化应用程序与数据库的交互。

    会议管理系统vb.net+sqlserver2000

    【会议管理系统vb.net+sqlserver2000】是一个基于微软.NET Framework开发的软件应用,主要利用Visual Basic .NET(VB.NET)作为编程语言,并结合SQL Server 2000作为数据库管理系统,来实现对会议的高效管理和组织。...

    基于ASP和sql server 2000的电子商务网站

    SQL Server 2000是微软公司的关系型数据库管理系统,广泛应用于企业级数据存储和管理。其特性包括: 1. **强大的数据处理能力**:支持大规模的数据存储和复杂的查询操作,提供事务处理和并发控制,确保数据的一致性...

    借书管理系统-BCB6+SQL Server 2000

    在实际开发过程中,BCB6和SQL Server 2000的集成通常通过ADO(ActiveX Data Objects)实现。ADO是微软提供的一种数据访问接口,它允许BCB6应用程序直接与SQL Server通信,进行数据查询和更新。开发者可以使用...

    Tool For SQL Server

    SQL Server是微软公司开发的一款关系型数据库管理系统,广泛应用于企业级的数据存储和处理。 描述中提到“运行程序需要Microsoft .NET Framework 2.0支持”,这意味着该工具是用.NET Framework 2.0开发的,这是一个...

    基于SQL Server的WEB式单位内部邮件系统的建立.pdf

    MailCon用于存储邮件内容,包含邮件ID、收件人、发件人、邮件标题、正文、附件信息、日期时间以及邮件大小。每个字段都有其特定的功能和用途。 实现过程中,申请邮箱就是向EmailUser表中插入新记录。登录验证、发送...

    asp+sqlserver2000网络书店系统.rar

    这个"asp+sqlserver2000网络书店系统"项目,为初学者提供了一个全面了解ASP和SQL Server 2000集成应用的实例。通过学习和实践,开发者可以掌握Web应用程序开发的基本流程,以及如何利用数据库管理用户数据、实现业务...

    Microsoft SQL Server 2000 Reporting Services发布.pdf

    SQL Server Reporting Services 2000通过内置的数据处理功能支持这些操作,比如使用SQL查询、存储过程等。 5. 报表的发布与管理 发布报表是报表服务的重要环节。报表发布后,可以被授权用户通过Web界面查看、打印或...

Global site tag (gtag.js) - Google Analytics