基于事件发送电子邮件
使用 SMTPEventConsumer 类可以在发生指定的事件时向指定的用户发送电子邮件。 此类是 WMI 提供的标准事件使用者。
SMTPEventConsumer 类需要满足以下条件才能发送电子邮件以响应事件:
- SMTPEventConsumer 类必须编译为正确的命名空间。 有关详细信息,请参阅借助标准使用者监视和响应事件。
- SMTP 服务器必须存在于网络上。
- 电子邮件不能包含附件。
- 电子邮件必须采用 US-ASCII 编码。
使用标准使用者的基本过程始终相同,位于使用标准使用者监视和响应事件中。 以下过程添加到基本过程中,且特定于 SMTPEventConsumer 类,描述了如何创建发送电子邮件的事件使用者。
以下过程说明如何创建发送电子邮件的事件使用者。
创建发送电子邮件的事件使用者
根据需要安装并注册 SMTPEventConsumer 类。
SMTPEventConsumer 类由 WMI 安装程序编译为 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 文件:
Mofcompfilename**.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 ;
};
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈