在Windows桌面上使用WSH接收郵件
發(fā)表時(shí)間:2024-05-13 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]公司的銷售管理人員日常想要接收訂單在$10,000元以上的電子郵件,同時(shí)也很愿意感謝來信訂購的用戶。電子郵件的主體要包括所有必要的信息,因此就沒有必要訪問公司客戶/服務(wù)器程序。第一步是近可能地委派數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)。在這里的例子中,我選擇了隨SQL Server 7.0安裝后隨帶的Northwin...
公司的銷售管理人員日常想要接收訂單在$10,000元以上的電子郵件,同時(shí)也很愿意感謝來信訂購的用戶。電子郵件的主體要包括所有必要的信息,因此就沒有必要訪問公司客戶/服務(wù)器程序。第一步是近可能地委派數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)。在這里的例子中,我選擇了隨SQL Server 7.0安裝后隨帶的Northwind數(shù)據(jù)庫。
原文出處:http://www.15seconds.com/issue/991007.htm
我決定在Northwind數(shù)據(jù)庫中建立一個(gè)視圖,它將提供所需要的一切。啟動(dòng)SQL Server Enterprise管理器,檢查一下Northwind數(shù)據(jù)庫下的視圖列表,Order Subtotals視圖就在眼前,它計(jì)算所有放置在Northwind數(shù)據(jù)庫中的定單總和。我決定在新視圖10K_Order_Qry中引用這個(gè)視圖,如下:
CREATE VIEW dbo.[10K_Order_Qry]
AS
SELECT [order subtotals].OrderID, CONVERT(varchar(15),
[order subtotals].Subtotal) AS 'Subtotal', CONVERT(char(10),
Orders.OrderDate, 110) AS 'OrderDate',
Customers.CompanyName, Customers.ContactName,
Customers.Country, Customers.Phone
FROM [order subtotals], Orders, Customers
WHERE [order subtotals].OrderID = Orders.OrderID AND
Orders.CustomerID = Customers.CustomerID AND
subtotal >= 10000
-- Below lines can be switched in order to look for today's sales over $10,000
-- (comment the next line, and uncomment the second line)
AND OrderDate >= '02-01-1998' AND OrderDate <= '02-28-1998'
--AND OrderDate = convert(char(10),getdate(),110)
注意:在視圖中引用另外一個(gè)視圖不是一個(gè)好的方法。但是,這里對此不做詳細(xì)地討論。
為了不修改Northwind中的數(shù)據(jù),并且能在郵件中顯示,請回顧這個(gè)新視圖“10K_Order_Qry”的最后2行。在其上的注釋行解釋了最后的目的。我要強(qiáng)調(diào)指出的是編寫一個(gè)存儲(chǔ)過程能達(dá)到更好的性能效果,因?yàn)榇鎯?chǔ)過程能被編譯。對于SQL Server預(yù)先設(shè)定一個(gè)執(zhí)行計(jì)劃,將大大地減少計(jì)劃執(zhí)行中的周折。
為了驗(yàn)證輸出的報(bào)告所需要的所有字段是否準(zhǔn)備好,我們可以在SQL Server Query Analyzer中執(zhí)行這個(gè)視圖進(jìn)行測試。
我們大多數(shù)人,在相當(dāng)多的時(shí)候,都在MS-DOS批處理文件中使用過腳本。融入Windows 98、Internet Information Server 4.0、Windows NT Workstation 2000和Windows NT Server 2000中的微軟Windows Scripting Host是一個(gè)獨(dú)立語言的腳本引擎。Visual Basic和JavaScript腳本引擎也被包含在Windows Scripting Host中。
本質(zhì)上,Windows Scripting Host提供給我們在Windows桌面上運(yùn)行腳本的功能,或者在命令控制臺(tái)執(zhí)行,而不需要在HTML文檔或者ASP中執(zhí)行。這是個(gè)強(qiáng)大的功能,并且能由此更深地研究,比如編寫登錄腳本、管理腳本或者機(jī)器自動(dòng)處理的工作。
現(xiàn)在準(zhǔn)備編寫腳本來建立一個(gè)報(bào)告,并且將它發(fā)送電子郵件給服務(wù)商管理者。我決定以Visual Basic Scripting語言編寫這個(gè)腳本,可以使用任何文字編輯器來創(chuàng)建它。唯一的要求是以“vbs”擴(kuò)展名來保存文件,比如
“MyScript.vbs”。如果安裝了Windows NT Option Pack 4,就存在了腳本調(diào)試器MSSCRDBG.EXE,它能被用做創(chuàng)建和調(diào)試腳本。它遠(yuǎn)遠(yuǎn)強(qiáng)于Notepad!
Dim objSendMail
Dim strTo, strFrom
Dim strSubject, strBody
Dim shipUic
' mail constants
Const CdoBodyFormatType = 0 ' Body property is HTML
Const CdoMailFormatType = 0 ' NewMail object is in MIME format
Const CdoNormal = 1 ' Normal importance (default)
strFrom = "admin@northwind.com" ' System administrator or DBA mail account
strTo =" manager@northwind.com" ' Recipient mail account - i.e. Sales Manager
strSubject = "Sales over $10,000" ' Mail subject
' Call function to build the HTML mail body
strBody = MailBody()
' The following section creates the E-mail object and sends the mail
Set objSendMail = CreateObject("CDONTS.NewMail")
objSendMail.From = strFrom
objSendMail.To = strTo
objSendMail.Subject = strSubject
objSendMail.Body = strBody
objSendMail.BodyFormat = CdoBodyFormatType
objSendMail.MailFormat = CdoMailFormatType
objSendMail.Importance = CdoNormal
objSendMail.Send
Set objSendMail = Nothing
' **********************************************************************************
Function MailBody()
Dim oConn
Dim oCmd
Dim oRs
Dim tmpBody
set oConn = CreateObject("ADODB.Connection")
oConn.Open("DATABASE=Northwind;DSN=Northwind;UID=sa;Password=;")
set oCmd = CreateObject("ADODB.Command")
oCmd.ActiveConnection = oConn
oCmd.CommandText = "select * from Northwind.dbo.[10k_order_qry] order by subtotal desc"
oCmd.CommandType = 1
oCmd.Prepared = True
set oRs = oCmd.Execute
oRs.moveFirst
tmpBody = "10K Customer Report"
tmpBody = tmpBody & "As of " & Date() & ""
tmpBody = tmpBody & ""
tmpBody = tmpBody & " ORDER ID "
tmpBody = tmpBody & " SUBTOTAL "
tmpBody = tmpBody & " COMPANY "
tmpBody = tmpBody & " CONTACT "
tmpBody = tmpBody & " COUNTRY "
tmpBody = tmpBody & " PHONE "
while not oRs.EOF
tmpBody = tmpBody & " " & oRs.Fields("OrderID") & " "
tmpBody = tmpBody & " " & "$" & oRs.Fields("Subtotal") & " "
tmpBody = tmpBody & " " & oRs.Fields("CompanyName") & " "
tmpBody = tmpBody & " " & oRs.Fields("ContactName") & " "
tmpBody = tmpBody & " " & oRs.Fields("Country") & " "
tmpBody = tmpBody & " " & oRs.Fields("Phone") & " "
oRs.moveNext
wend
tmpBody = tmpBody & " "
MailBody = tmpBody
set oRs = nothing
set oCmd = nothing
set oConn = nothing
End Function
這里插入了足夠的注釋用以闡明腳本的含義,但對于那些不熟悉HTML的用戶來說,下面是一個(gè)簡單的標(biāo)記解釋對應(yīng)表,我在腳本中使用了它們來建立郵件(報(bào)告)的主體:
標(biāo)記 含義
?lt;/H2> Header Tag Size 2
?lt;/FONT> Font Color "Red"
?lt;/B> Bold Text
?lt;/TABLE> Table Format
?lt;/TR> Table Row
?lt;/TH> Header Cell
?lt;/TD> Data Cell
現(xiàn)在讓我們在Windows Scripting Host中運(yùn)行編寫的Visual Basic腳本。在Windows的資源瀏覽器Explorer中,用鼠標(biāo)右鍵單擊MyScript.vbs,選擇“屬性”,點(diǎn)擊“Script”功能頁面。
檢查“Stop script after specified number of seconds”復(fù)選框,設(shè)置足夠的時(shí)間來讓腳本運(yùn)行完成(默認(rèn)是10秒鐘)。按下OK按鈕,新的腳本文件就創(chuàng)建了,但是名字改變?yōu)镸yScript.WSH。WSH文件的內(nèi)容與古老的“ini”文件類似:
[ScriptFile]
Path=MyScript.vbs
[Options]
Timeout=30
DisplayLogo=1
BatchMode=0
假設(shè)沒有錯(cuò)誤,在雙擊MyScript.WSH文件后,郵件接收者將收到一封郵件,內(nèi)容主體是報(bào)告,如下:
10K Customer Report
As of 9/13/99
ORDER ID SUBTOTAL COMPANY CONTACT COUNTRY PHONE
10865 $16387.50 QUICK-Stop Hors t Kloss Germany 0372-035188
10889 $11380.00 Rattlesnake Canyon Grocery Paula Wilson USA (505) 555-5939
10897 $10835.24 Hungry Owl All-Night Grocers Patricia McKenna Ireland 2967 542
現(xiàn)在可以確認(rèn)腳本工作正常,最后一步是設(shè)置每日的定時(shí)執(zhí)行,這里使用了Windows計(jì)劃執(zhí)行程序來完成定時(shí)任務(wù)的設(shè)置。啟動(dòng)Windows計(jì)劃執(zhí)行程序,選擇Edit菜單,選擇Add,輸入要執(zhí)行的腳本名字,設(shè)置執(zhí)行的時(shí)間:
按“OK”按鈕,完成設(shè)置,這條項(xiàng)目顯示如下:
Windows Scripting Host,CDONTS以及計(jì)劃執(zhí)行程序有廣泛的應(yīng)用面,這里只是列舉了一個(gè)實(shí)際的應(yīng)用。
(出處:熱點(diǎn)網(wǎng)絡(luò))