日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀]54powerman(54powerman@163.com)說兩句:在某人最困難的時候,寫下此文,寄給某某報想騙點(diǎn)稿費(fèi),結(jié)果石沉大海,若干年后,翻騰硬盤翻出來了。呵呵,或許可以對希望在SqlServe

54powerman(54powerman@163.com)

說兩句:在某人最困難的時候,寫下此文,寄給某某報想騙點(diǎn)稿費(fèi),結(jié)果石沉大海,若干年后,翻騰硬盤翻出來了。呵呵,或許可以對希望在SqlServer中發(fā)送郵件的網(wǎng)友有所幫助。

54powerman^_^


??? Sql Mail技術(shù)給每一位數(shù)據(jù)庫開發(fā)人員和DBA(數(shù)據(jù)庫管理員)帶來了極大的方便,利用該技術(shù),Sql Server數(shù)據(jù)庫代理程序可以在系統(tǒng)出現(xiàn)異常的時候自動發(fā)送Email通知管理員,開發(fā)人可以利用它讓數(shù)據(jù)庫自動定期的修改用戶密碼,然后發(fā)送Email通知用戶……等等這些應(yīng)用,都不同程度上把我們從繁雜的工作中解放出來。但是,Sql Mail的配置是比較復(fù)雜的,相信90%以上的人在配置Sql Mail的時候都遇到過各種各樣的麻煩,至少有70%的人放棄了Sql Mail而選擇其他方案來解決這個問題。筆者是一名Web開發(fā)人員,親身經(jīng)歷了這一切,并找到了一個更好的替代方法。不敢獨(dú)享,寫出來以饗讀者。
Sql Mail配置有幾種方式,按照支持軟件可劃分為基于Exchange、Outlook2000(以上)和第三方軟件的配置方案,三種方式各有利弊,主要表現(xiàn)在以下幾個方面:

??? 使用Outlook客戶端配合Sql Server實(shí)現(xiàn)Sql Mail
??? 此方案軟件要求較低,只需要在Sql Server所在服務(wù)器上安裝Outlook2000以上版本客戶端即可。它要求在Sql Mail使用期間,OutLook客戶端必須打開,否則,只能到下次打開時,郵件才能發(fā)送出去。另外,如果服務(wù)器為遠(yuǎn)程服務(wù)器,用微軟官方的遠(yuǎn)程桌面無法完成配置,可替代的方案是DBA親自去機(jī)房直接操作,或者安裝PcAnywhere10替代遠(yuǎn)程桌面進(jìn)行操作。

??? 使用Exchange要求較高
??? Microsoft推薦使用Exchange作為Sql Mail的最佳拍檔,MSDN的資料提出:“由于 POP3/SMTP 協(xié)議存在的局限性和登錄問題,Microsoft 建議您使用 Exchange Server 來實(shí)現(xiàn)可靠性”。但是Exchange并不是專門做這個來使用的,可以說是屈才了,而且Exchange要求服務(wù)器配置域管理器,相信這個東東對大多數(shù)數(shù)據(jù)庫服務(wù)器來說用處不大,只不過是浪費(fèi)資源罷了。如果我們要在多臺服務(wù)器上配置Sql Mail那么就需要在每一臺服務(wù)器上配置域管理器,或者所有的服務(wù)器都配置到一個域內(nèi),但是對于服務(wù)器比較分散的系統(tǒng)來說這樣是不現(xiàn)實(shí)的。

??? 使用第三方系統(tǒng)支持
??? 微軟MSDN稱:“如果您使用的是第三方郵件服務(wù)器,則必須將郵件服務(wù)器配置為 POP3 服務(wù)器。如果這些郵件服務(wù)器使用的本地郵件服務(wù)可能是由第三方郵件客戶端安裝的,Microsoft 將不支持連接到這些服務(wù)器”。這就意味著你還要使用Windows平臺的郵件服務(wù),使用ASP編寫網(wǎng)站的朋友一定都知道,Cdonts.dll組件實(shí)在是……。
面對這些問題,筆者就變成了我剛才說的那70%了,雖然爬網(wǎng)無數(shù),讀文字?jǐn)?shù)萬把Sql Mail配置好了,但是我仍然絕對放棄,因為我不想在做第2臺、第3臺……的時候重蹈覆轍。替代的方案就是Jmail組件+OLE自動化對象,以上的問題迎刃而解。

??? 預(yù)備知識
??? 1.OLE自動化函數(shù)
??? OLE自動化使應(yīng)用程序能夠?qū)α硪粋€應(yīng)用程序中實(shí)現(xiàn)的對象進(jìn)行操作,或者將對象公開以便可以對其進(jìn)行操作。自動化客戶端是可對屬于另一個應(yīng)用程序的公開對象進(jìn)行操作的應(yīng)用程序,本文值得是Sql Server。公開對象的應(yīng)用程序稱為自動化服務(wù)器,又成為自動化組件,本文中即Jmail組件咯??蛻舳送ㄟ^訪問應(yīng)用程序?qū)ο蟮膶傩院秃瘮?shù)對這些對象進(jìn)行操作。
??? 在Sql Server使用Ole組件的途徑是幾個系統(tǒng)擴(kuò)展存儲過程sp_OACreate、sp_OADestroy、sp_OAGetErrorInfo、sp_OAMethod、sp_OASetProperty和sp_OAGetProperty,再次簡單地介紹一下使用方法,詳細(xì)資料參考Sql Server聯(lián)機(jī)叢書。
??? OLE自動化對象的使用方法:
??? (1)調(diào)用 sp_OACreate 創(chuàng)建對象。
??? 格式:sp_OACreate clsid,objecttoken OUTPUT [ , context ]
??? 參數(shù):clsid——是要創(chuàng)建的 OLE 對象的程序標(biāo)識符 (ProgID)。此字符串描述該 OLE 對象的類,其形式,如 'OLEComponent.Object',OLEComponent 是 OLE 自動化服務(wù)器的組件名稱,Object 是 OLE 對象名,本文中使用的“JMail.Message”;
Objecttoken——是返回的對象標(biāo)志,并且必須是數(shù)據(jù)類型為 int 的局部變量。用于標(biāo)識所創(chuàng)建的 OLE 對象,并將在調(diào)用其它 OLE 自動化存儲過程時使用。本文中就是通過它來調(diào)用JMail.Message組件的屬性和方法的。
??? Context——指定新創(chuàng)建的 OLE 對象要在其中運(yùn)行的執(zhí)行上下文。本文不使用該參數(shù),故不贅述。以下與此一致,所有方法屬性的其他用法請參閱Sql Server聯(lián)機(jī)文檔。
??? (2)使用該對象。
??? (a)調(diào)用 sp_OAGetProperty 獲取屬性值。
??? 格式:_OAGetProperty objecttoken,propertyname [, propertyvalue OUTPUT]
??? 參數(shù):(前面出現(xiàn)過的參數(shù),以下均省略。)
??? Propertyname——對象的屬性名稱;
??? Propertyvalue——返回的對象的屬性值,該參數(shù)帶OUTPUT屬性,執(zhí)行該操作后,你就可以從propertyvalue中得到屬性的值了。
??? (b)調(diào)用 sp_OASetProperty 將屬性設(shè)為新值。
??? 格式:sp_OASetProperty objecttoken, propertyname, propertyvalue
??? (c)調(diào)用 sp_OAMethod 以調(diào)用某個方法。
??? 格式:sp_OAMethod objecttoken, methodname [, returnvalue OUTPUT] [ , [ parametername = ] parametervalue? [...n]]
??? 參數(shù):Returnvalue——調(diào)用方法的返回值,如果沒有返回值,此參數(shù)設(shè)置為NULL;
??? Parametername——方法定義中的參數(shù)名稱,也就是形參;
??? Parametervalue——參數(shù)值;
??? ……n——表示,可以帶很多參數(shù),個數(shù)由方法定義限制;
??? (d)調(diào)用 sp_OAGetErrorInfo 獲取最新的錯誤信息。
??? 格式:sp_OAGetErrorInfo [objecttoken ] [, source OUTPUT] [, description OUTPUT]
??? 參數(shù):Source——錯誤源;
??? Description——錯誤描述;
??? (3)調(diào)用 sp_OADestroy 釋放對象。
??? 格式:sp_OADestroy objecttoken

??? 2.xp_cmdshell擴(kuò)展存儲過程
??? 該擴(kuò)展存儲過程在master數(shù)據(jù)庫中,它的全路徑是master..xp_cmdshell(注意,中間是2個點(diǎn)),它的功能是:以操作系統(tǒng)命令行解釋器的方式執(zhí)行給定的命令字符串,并以文本行方式返回任何輸出。
??? 格式:xp_cmdshell {'command_string'} [, no_output]
??? 參數(shù):'command_string'——是在操作系統(tǒng)命令行解釋器上執(zhí)行的命令字符串。
??? no_output——是可選參數(shù),表示執(zhí)行給定的 command_string,但不向客戶端返回任何輸出。本文應(yīng)用中不使用該參數(shù)。

??? 操作方法
??? (1)軟件準(zhǔn)備
??? 請先到http://www.dimac.net/或者國內(nèi)提供組件下載的網(wǎng)站下載最新版的JMail組件,如果你得到的是安裝版,執(zhí)行weJMailx.exe即可,系統(tǒng)的配置安裝程序會自動完成。如果只有一個JMail.dll文件,請按照下面的步驟安裝:
??? (a)新建文本文件,輸入如下命令:
??? regsvr32 JMail.dll
??? net start w3svc
??? 另存為Install.Bat(注意,千萬不要保存成Install.Bat.Txt?。?br />??? (b)此文件連同Jmail.dll一起拷貝到Sql Server數(shù)據(jù)庫服務(wù)器的System32目錄下,并執(zhí)行雙擊Install.Bat即可。
??? (2)準(zhǔn)備好了嗎?跟我來吧
??? (a)運(yùn)行Sql Server查詢分析器,并以sa身份登錄到Sql Server數(shù)據(jù)庫;
??? (b)如果你的存儲過程要添加到Y(jié)ourDefaultCatalog數(shù)據(jù)庫,請在空白Sql窗口輸入如下指令,否則請相應(yīng)修改數(shù)據(jù)庫名。
??? Use YourDefaultCatalog
??? 按F5或者運(yùn)行按鈕運(yùn)行該指令;
??? (c)創(chuàng)建基本發(fā)送存儲過程
??? 復(fù)制如下代碼到Sql Server命令窗口,并運(yùn)行。下面的代碼中有相應(yīng)的注釋,文中不多做解釋,如有疑問請查看前面的“預(yù)備知識”或者查詢Sql Server幫助文件,當(dāng)然也可以和作者聯(lián)系。

Create Procedure dbo.sp_jmail_send
@sender varchar(100),
@sendername varchar(100)='',
@serveraddress varchar(255)='SMTP服務(wù)器地址',
@MailServerUserName varchar(255)=null,
@MailServerPassword varchar(255)=null,
@recipient varchar(255),
@recipientBCC varchar(200)=null,
@recipientBCCName varchar(200)=null,
@recipientCC varchar(200)=null,
@recipientCCName varchar(100)=null,
@attachment varchar(100) =null,
@subject varchar(255),
@mailbody text
As
/*
該存儲過程使用辦公自動化腳本調(diào)用Dimac w3 JMail AxtiveX組件來代替Sql Mail發(fā)送郵件
該方法支持“服務(wù)器端身份驗證”
*/
--聲明w3 JMail使用的常規(guī)變量及錯誤信息變量
Declare @object int,@hr int,@rc int,@output varchar(400),@description varchar (400),@source varchar(400)

--創(chuàng)建JMail.Message對象

Exec @hr = sp_OACreate 'jmail.message', @object OUTPUT

--設(shè)置郵件編碼
Exec @hr = sp_OASetProperty @object, 'Charset', 'gb2312'

--身份驗證
If Not @MailServerUserName is null
Exec @hr = sp_OASetProperty @object, 'MailServerUserName',@MailServerUserName
If Not @MailServerPassword is null
Exec @hr = sp_OASetProperty @object, 'MailServerPassword',@MailServerPassword

--設(shè)置郵件基本參數(shù)
Exec @hr = sp_OASetProperty @object, 'From', @sender
Exec @hr = sp_OAMethod @object, 'AddRecipient', NULL , @recipient
Exec @hr = sp_OASetProperty @object, 'Subject', @subject
Exec @hr = sp_OASetProperty @object, 'Body', @mailbody

--設(shè)置其它參數(shù)
if not @attachment is null
exec @hr = sp_OAMethod @object, 'Addattachment', NULL , @attachment,'false'
print @attachment
If (Not @recipientBCC is null) And (Not @recipientBCCName is null)
Exec @hr = sp_OAMethod @object, 'AddRecipientBCC', NULL , @recipientBCC,@recipientBCCName
Else If Not @recipientBCC is null
Exec @hr = sp_OAMethod @object, 'AddRecipientBCC', NULL , @recipientBCC

If (Not @recipientCC is null) And (Not @recipientCCName is null)
Exec @hr = sp_OAMethod @object, 'AddRecipientCC', NULL , @recipientCC,@recipientCCName
Else If Not @recipientCC is null
Exec @hr = sp_OAMethod @object, 'AddRecipientCC', NULL , @recipientCC

If Not @sendername is null
Exec @hr = sp_OASetProperty @object, 'FromName', @sendername

--調(diào)用Send方法發(fā)送郵件
Exec @hr = sp_OAMethod @object, 'Send', null,@serveraddress

--捕獲JMail.Message異常
Exec @hr = sp_OAGetErrorInfo @object, @source OUTPUT, @description OUTPUT

if (@hr = 0)
Begin
Set @output='錯誤源: '+@source
Print @output
Select @output = '錯誤描述: ' + @description
Print @output
End
Else
Begin
Print '獲取錯誤信息失敗!'
Return
End

--釋放JMail.Message對象
Exec @hr = sp_OADestroy @object

??? (d)簡化存儲過程操作,以適合我們平時的使用習(xí)慣
??? 上面的存儲過程基本可以完成郵件發(fā)送操作,但是非常冗長,而且不符合我們的習(xí)慣,比如它不支持多個發(fā)送給接收者、不支持將Sql指令運(yùn)行結(jié)果以附件形式發(fā)送(這是Sql Mail的功能,我們也可以做到)等,所以我們要再寫一個存儲過程來調(diào)用它,以簡化操作,并擴(kuò)展功能。

Create Procedure SendMail
@Sender varChar(50)=null,
@strRecipients varChar(200),
@strSubject varChar(200),
@strMessage varChar(2000),
@sql varChar(50)=null)
As

Declare @SplitStr varchar(1)?--定義郵件地址分割符變量
Declare @strTemp varchar(200)?--定義多個收件人字符串臨時變量
Declare @email varchar(50)?--用分割符分割后的單個收件人字符串變量

Declare @SenderAddress varChar(50)
Declare @Attach varChar(200)

Declare @DefaultSender varChar(50)
Declare @MailServer varChar(50)
Declare @User varChar(50)
Declare @Pass varChar(50)
Declare @SenderName varChar(50)
Declare @AttachDir varChar(100)

--初始化缺省變量
Set @DefaultSender='缺省發(fā)送地址'
Set @MailServer='郵件服務(wù)器地址'
Set @User='SMTP服務(wù)器驗證用戶地址'
Set @Pass='SMTP服務(wù)器驗證地址'
Set @SenderName='缺省發(fā)件人名稱'
Set @AttachDir='E:/LOG/WebData/Jmail/'+Replace(Replace(Replace(Convert(varChar(19),GetDate(),120),'-',''),' ',''),':','')+'.txt'

--將Email地址分割符統(tǒng)一為分號
set @SplitStr=';'
Set @strTemp=@strRecipients+@SplitStr+'end'
Set @strTemp=Replace(@strTemp,',',';')

--判斷是否有sql語句
If (@Sql is Null) Or (len(@Sql)=0)
Set @AttachDir=Null
Else
Begin
Declare @CmdStr varChar(200)
Set @CmdStr='bcp "'+@Sql+'" queryout '+@AttachDir+' -c'
EXEC master..xp_cmdshell @CmdStr
End

while CharIndex(@SplitStr,@strTemp,1)<>0
Begin
Set @email=left(@strTemp,CharIndex(@SplitStr,@strTemp,1)-1)
Set @strTemp=right(@strTemp,len(@strTemp)-len(@email)-1)
If (@Sender Is Null) Or (Len(@Sender)=0)
Set @SenderAddress=@DefaultSender
Else
Set @SenderAddress=@Sender
Print @email
--調(diào)用sp_jmail_send發(fā)送郵件
EXEC sp_jmail_send @sender=@SenderAddress,@sendername=@SenderName,
@serveraddress=@MailServer,@MailServerUserName=@User,@MailServerPassword=@Pass,
@recipient=@email,@subject=@strSubject,@mailbody=@strMessage,@attachment=@AttachDir
End
??? 此存儲過程只擴(kuò)展了Sql查詢結(jié)果附件發(fā)送,如果你要發(fā)送標(biāo)準(zhǔn)附件,請直接使用sp_jmail_send存儲過程或者自行擴(kuò)展功能。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉