SQL Server不用內建的SQLMAIL發郵件的方法

來源:互聯網
上載者:User
公司資料庫有台是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調用外部組件發送郵件的全部過程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.