返回列表 回复 发帖

在Windows桌面上使用WSH接收邮件

公司的销售管理人员日常想要接收订单在$10,000元以上的电子邮件,同时也很愿意感谢来信订购的用户。电子邮件的主体要包括所有必要的信息,因此就没有必要访问公司客户/服务器程序。第一步是近可能地委派数据库服务器的数据。在这里的例子中,我选择了随SQL Server 7.0安装后随带的Northwind数据库。



原文出处:http://www.15seconds.com/issue/991007.htm



   我决定在Northwind数据库中建立一个视图,它将提供所需要的一切。启动SQL Server Enterprise管理器,检查一下Northwind数据库下的视图列表,Order Subtotals视图就在眼前,它计算所有放置在Northwind数据库中的定单总和。我决定在新视图10K_Order_Qry中引用这个视图,如下:



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)

   注意:在视图中引用另外一个视图不是一个好的方法。但是,这里对此不做详细地讨论。



   为了不修改Northwind中的数据,并且能在邮件中显示,请回顾这个新视图“10K_Order_Qry”的最后2行。在其上的注释行解释了最后的目的。我要强调指出的是编写一个存储过程能达到更好的性能效果,因为存储过程能被编译。对于SQL Server预先设定一个执行计划,将大大地减少计划执行中的周折。



   为了验证输出的报告所需要的所有字段是否准备好,我们可以在SQL Server Query Analyzer中执行这个视图进行测试。

我们大多数人,在相当多的时候,都在MS-DOS批处理文件中使用过脚本。融入Windows 98、Internet Information Server 4.0、Windows NT Workstation 2000和Windows NT Server 2000中的微软Windows Scripting Host是一个独立语言的脚本引擎。Visual Basic和JavaScript脚本引擎也被包含在Windows Scripting Host中。



   本质上,Windows Scripting Host提供给我们在Windows桌面上运行脚本的功能,或者在命令控制台执行,而不需要在HTML文档或者ASP中执行。这是个强大的功能,并且能由此更深地研究,比如编写登录脚本、管理脚本或者机器自动处理的工作。



   现在准备编写脚本来建立一个报告,并且将它发送电子邮件给服务商管理者。我决定以Visual Basic Scripting语言编写这个脚本,可以使用任何文字编辑器来创建它。唯一的要求是以“vbs”扩展名来保存文件,比如

“MyScript.vbs”。如果安装了Windows NT Option Pack 4,就存在了脚本调试器MSSCRDBG.EXE,它能被用做创建和调试脚本。它远远强于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的用户来说,下面是一个简单的标记解释对应表,我在脚本中使用了它们来建立邮件(报告)的主体:



   标记 含义

?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



   现在让我们在Windows Scripting Host中运行编写的Visual Basic脚本。在Windows的资源浏览器Explorer中,用鼠标右键单击MyScript.vbs,选择“属性”,点击“Script”功能页面。



  



   检查“Stop script after specified number of seconds”复选框,设置足够的时间来让脚本运行完成(默认是10秒钟)。按下OK按钮,新的脚本文件就创建了,但是名字改变为MyScript.WSH。WSH文件的内容与古老的“ini”文件类似:



[ScriptFile]

Path=MyScript.vbs



[Options]

Timeout=30

DisplayLOGO=1

BatchMode=0



   假设没有错误,在双击MyScript.WSH文件后,邮件接收者将收到一封邮件,内容主体是报告,如下:



   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



   现在可以确认脚本工作正常,最后一步是设置每日的定时执行,这里使用了Windows计划执行程序来完成定时任务的设置。启动Windows计划执行程序,选择Edit菜单,选择Add,输入要执行的脚本名字,设置执行的时间:



   按“OK”按钮,完成设置,这条项目显示如下:

   Windows Scripting Host,CDONTS以及计划执行程序有广泛的应用面,这里只是列举了一个实际的应用。
简单就好!
只要没水坑我就踩[我的空间帮忙踩下嘛~~~http://user.qzone.qq.com/39121228
一般人看不懂

只顾支持
zxb8980为您提示◆
注意身体灬不要沉迷于网络!
您的支持是论坛的源动力!
返回列表