SQL Server不用自带的SQLMAIL发邮件的方法

公司数据库有台是SQLSERVER,需要在存储过程中发送邮件,但是该服务器没有装OUTLOOK,用SQLMAIL组件发邮件既不方便用不安全,故需要从其它方面下手

SQLSERVER可以有扩展组件,利用这个特点我们可以用高级语言写个邮件发送方法,然后将他注册成SQL可以访问的组件,在SQL语句中就可以调用这个方法来发送邮件了,简单又方便.
这里对发邮件类不做介绍,重点讲下如何注册成组件并在SQL里面调用.
假如我们用C#写好了一个DLL组件名字叫 ExtenStoreProc.dll ,里面有发邮件的方法.在DOTNET安装目录下有个导入工具叫REGASM.EXE,利用它我们把.NET开发的组件注册成系统组件。
REGASM的语法是:
Microsoft (R) .NET Framework Assembly Registration Utility 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002.  All rights reserved.

語法: RegAsm AssemblyPath [選項]
選項:
    /unregister          取消註冊型別
    /tlb[:FileName]      將組件匯出至指定的型別程式庫並註冊
    /regfile[:FileName]  產生一個使用指定名稱的登錄檔,而不要註冊型別。
                         這個選項不可以和 /u 或 /tlb 選項一起使用
    /codebase            設定登錄中的程式碼基底
    /registered          僅參考已登錄的型別程式庫
    /nologo              不要讓 RegAsm 顯示產品資訊
    /silent              無訊息模式。不要顯示執行成功的訊息
    /verbose             顯示其他的相關資訊
    /? 或 /help          顯示這個使用方式的訊息

我们只需要执行如下命令即可:
regasm /tlb:ExtenStoreProc.tlb ExtenStoreProc.dll /codebase
如果提示成功则表示已将此组件导入成系统组件,我们就可以在SQL里面访问这个组件了

如下一个存储过程显示了如何调用此组件
CREATE   PROCEDURE  ExtenStoreProcTest   AS

declare   @object   int
DECLARE   @hr   int
DECLARE   @property   varchar ( 255 )
DECLARE   @return   varchar ( 255 )
DECLARE   @src   varchar ( 255 ),  @desc   varchar ( 255 )

-- 初始化
EXEC   @hr   =  sp_OACreate  ' ExtenStoreProc.ExtenStoreProc ' @object  OUT           -- namespace.classname
IF   @hr   <>   0
BEGIN
EXEC  sp_OAGetErrorInfo  @object @src  OUT,  @desc  OUT
SELECT  hr = convert ( varbinary ( 4 ), @hr ), Source = @src , Description = @desc
RETURN
END

-- 執行
declare   @subject   varchar ( 255 ), @content   varchar ( 8000 ), @mailfrom   varchar ( 255 ), @mailto   varchar ( 255 ), @cmd   varchar ( 8000 )
set   @subject   =   ' Sql Mail Test '
set   @content   =   ' This is sql Procedure Send Mail '
set   @mailfrom   =   'mailfrom @company.com '
set   @mailto   =   'mailto @company.com '
set   @cmd   =   ' SendMail(" '   +   @subject   +   ' "," '   +   @content   +   ' "," '   +   @mailfrom   +   ' "," '   +   @mailto   +   ' ") '  --SendMail为组件里的方法
print   @cmd

EXEC   @hr   =  sp_OAMethod  @object , @cmd @return  OUT                             -- method
--
EXEC @hr = sp_OAMethod @object, 'Main', @return OUT                            --method
IF   @hr   <>   0
BEGIN
EXEC  sp_OAGetErrorInfo  @object @src  OUT,  @desc  OUT
SELECT  hr = convert ( varbinary ( 4 ), @hr ), Source = @src , Description = @desc
RETURN
END
PRINT   @return

-- 銷毀
EXEC   @hr   =  sp_OADestroy  @object
IF   @hr   <>   0
BEGIN
EXEC  sp_OAGetErrorInfo  @object @src  OUT,  @desc  OUT
SELECT  hr = convert ( varbinary ( 4 ), @hr ), Source = @src , Description = @desc
RETURN
END
GO

如上就是用SQL调用外部组件发送邮件的全部过程

转载于:https://www.cnblogs.com/zzyyll2/archive/2007/10/29/941176.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值