嗨,RT。顺便说一下,感谢您提出这个问题。至少有一名 Scripting Guys 成员几乎整个感恩节周末都在吃东西,而在不吃东西的那一点点时间里,他与一大群比他更高大但年轻的多的侄子外甥们一起玩橄榄球。说实话,这位 Scripting Guy 成员希望能够顺利地恢复工作状态,而这个问题正是一个非常好的开端。
对于不熟悉 CDO(Collaboration Data Objects 的简称)的人而言,这项技术提供了一条通过脚本发送电子邮件的途径。只要网络中有 SMTP 服务器,就可以使用类似下方所示的代码创建并发送电子邮件:
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "helpdesk@fabrikam.com"
objEmail.To = "administrator@fabrikam.com"
objEmail.Subject = "Server down"
objEmail.Textbody = "Server1 is no longer accessible over the network."
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
"smtpmailer"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
今天我们不会详细介绍这个脚本;如需快速了解此处所用的各个属性,请参见Microsoft Windows 2000 脚本指南. 可能不需要费多大力气,您就可以设好 From、To、Subject 和 Textbody 属性。URI(比如:http://schemas.microsoft.com/cdo/configuration/sendusing)属于样本代码,通常可以保留不动;在多数情况下,只需更改 smtpserver。在我们的示例代码中,我们已经引用了一台 SMTP 邮件服务器(我们称之为 smtpmailer);您将需要把它替换为您的 SMTP 邮件服务器的名称。
顺便说一下,这些 URI 关联到许多人:他们疑惑为何需要连接到 Microsoft 来发送电子邮件。事实是,不会真的连接到 Microsoft;这些 URI 只是属性而已。为何要怎样引用呢?老实说,我们不清楚。但是别担心:您的邮件不会通过 Microsoft 进行路由,而且这里的人也不会阅读您的信件。相信我们,我们自己的电子邮件已经让我们够头疼了,没有时间去读别人的邮件。
那么,如何在电子邮件中加入附件呢?只要再加一行代码就行了,比如这行代码(将文件 C:/Scripts/Output.txt 附加到电子邮件中):
objEmail.AddAttachment "C:/Scripts/Output.txt"
就是这样;在脚本中加入这行代码,就可以得到附件了。整个脚本的内容将为:
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "helpdesk@fabrikam.com"
objEmail.To = "administrator@fabrikam.com"
objEmail.Subject = "Server down"
objEmail.Textbody = "Server1 is no longer accessible over the network."
objEmail.AddAttachment "C:/Scripts/Output.txt"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
"smtpmailer"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
请注意,有几个人问过我们,如果 SMTP 服务器要求身份验证,该如何发送电子邮件呢?说实话,我们很难回答这个问题,因为(由于各种原因),我们无法测试这种情景。但是,可以在脚本中添加用户名和密码:
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "fabrikam/kenmyer"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "&gr54#wgha"
上面的代码将让您作为 fabrikam/kenmyer 登录 SMTP 服务器,密码为 &gr54#wgha。请注意,这样确实将以明文形式发送用户名和密码。因此,您可能不想使用管理员帐户发送电子邮件。那么,创建一个有权发送电子邮件的用户帐户,并使用该帐户进行登录。如需更多信息,请参见 MSDN 上的官方CDO 文档 。