根据事件发送电子邮件
通过使用 SMTPEventConsumer 类,可以在发生指定事件时向指定用户发送电子邮件。 此类是 WMI 提供的标准事件使用者。
SMTPEventConsumer 类需要满足以下条件才能发送电子邮件以响应事件:
- SMTPEventConsumer 类必须编译到正确的命名空间。 有关详细信息,请参阅使用标准使用者监视和响应事件。
- 网络上必须存在 SMTP 服务器。
- 电子邮件不能有附件。
- 电子邮件必须以 US-ASCII 编码。
使用标准使用者的基本过程始终相同,并且位于使用标准使用者监视和响应事件中。 以下程序是对基本过程的补充;特定于 SMTPEventConsumer 类;并描述了如何创建发送电子邮件的事件使用者。
以下过程介绍如何创建发送电子邮件的事件使用者。
创建发送电子邮件的事件使用者
如有必要,安装并注册 SMTPEventConsumer 类。
WMI 安装程序将 SMTPEventConsumer 类编译到 root\subscription 命名空间中。
确定要监视的事件并创建事件查询。
可能存在一个现有的内部事件用于监视事件。 大多数内部事件都与“root\cimv2”命名空间中类实例的更改相关联。 通过分析 WMI 引用中的类,可能会找到一个标识要监视的事件的类。 例如,使用 Win32_LogicalDisk 类监视硬盘驱动器的更改。
如果没有使用的现有内部事件,则可能有一个可以工作的外在事件提供程序。 例如,使用注册表提供程序的 RegistryTreeChangeEvent 类监视系统注册表的更改。
如果标识要监视的事件的类不存在,则必须创建自己的事件提供程序并定义新的外层事件类。 有关详细信息,请参阅编写事件提供程序。
在托管对象格式 (MOF) 文件中,创建 SMTPEventConsumer 的实例以接收事件。
使用实例的属性定义在事件发生时要发送的电子邮件。 例如,ToLine 属性定义电子邮件地址,Message 属性定义电子邮件的文本。 必须定义邮件的电子邮件地址、主题和文本,但电子邮件不能有附件。 有关详细信息,请参阅设计托管对象格式 (MOF) 类。
创建一个事件查询,指定要监视的事件。
有关详细信息,请参阅利用 WQL 进行查询。
创建 __EventFilter 的实例,并将查询存储在 Query 属性中。
有关详细信息,请参阅利用 WQL 进行查询。
创建 __FilterToConsumerBinding 的实例,以关联筛选器和使用者。
使用 Mofcomp.exe 编译 MOF 文件。
示例
本节中的示例在 MOF 代码中,但可以通过使用适用于 WMI 的脚本 API 或适用于 WMI 的 COM API 以编程方式创建实例。
以下过程介绍如何使用示例。
使用示例
将以下 MOF 复制到文本文件中,并以 .mof 扩展名保存。
在命令提示符窗口中,使用以下命令编译 MOF 文件:
Mofcomp filename**.mof**
注意
将 MOF 代码编译到 root\subscription 命名空间中时, SMTPEventConsumer 将编译为同一命名空间。
#pragma namespace ("\\\\.\\root\\subscription")
instance of __EventFilter as $FILTER
{
Name = "LowDiskspaceFilter";
EventNamespace = "\\\\.\\root\\cimv2";
Query = "SELECT * FROM __InstanceModificationEvent WITHIN 10 "
"WHERE TargetInstance ISA \"Win32_LogicalDisk\" "
"AND TargetInstance.FreeSpace < 846000000 "
"AND PreviousInstance.FreeSpace >= 846000000 "
"AND (TargetInstance.DeviceID = \"C:\" "
"OR TargetInstance.DeviceID = \"D:\")";
QueryLanguage = "WQL";
};
instance of SMTPEventConsumer as $CONSUMER
{
Name = "LowDisk";
ToLine = "SysAd@MyCompany.com, MyAlias@MyCompany.com";
CcLine = "MyHome@MyISP.com";
ReplyToLine = "MyAlias@MyCompany.com";
SMTPServer = "SmartHost";
Subject = "WARNING: Low disk space";
Message = "WARNING: Your %TargetInstance.DeviceID% is"
" getting dangerously low.";
};
instance of __FilterToConsumerBinding
{
Consumer = $CONSUMER ;
Filter = $FILTER ;
};
相关主题