基于事件发送电子邮件

使用 SMTPEventConsumer 类可以在发生指定的事件时向指定的用户发送电子邮件。 此类是 WMI 提供的标准事件使用者

SMTPEventConsumer 类需要满足以下条件才能发送电子邮件以响应事件:

使用标准使用者的基本过程始终相同,位于使用标准使用者监视和响应事件中。 以下过程添加到基本过程中,且特定于 SMTPEventConsumer 类,描述了如何创建发送电子邮件的事件使用者。

以下过程说明如何创建发送电子邮件的事件使用者。

创建发送电子邮件的事件使用者

  1. 根据需要安装并注册 SMTPEventConsumer 类。

    SMTPEventConsumer 类由 WMI 安装程序编译为 root\subscription 命名空间。

  2. 确定要监视的事件并创建事件查询。

    可能存在用于监视事件的现有内在事件。 大多数内在事件都与“root\cimv2”命名空间中的类实例的更改相关联。 通过分析 WMI 类引用中的类,你可能会找到一个标识要监视的事件的类。 例如,使用 Win32_LogicalDisk 类监视对硬盘驱动器的更改。

    如果没有可用的现有内在事件,可能会有一个可用的外在事件提供程序。 例如,使用注册表提供程序的 RegistryTreeChangeEvent 类监视对系统注册表的更改。

    如果不存在标识要监视的事件的类,则你必须创建自己的事件提供程序,并定义新的外在事件类。 有关详细信息,请参阅编写事件提供程序

  3. 在托管对象格式 (MOF) 文件中,创建 SMTPEventConsumer 的实例以接收事件。

    使用该实例的属性来定义在事件发生时要发送的电子邮件。 例如,ToLine 属性定义电子邮件地址,Message 属性定义电子邮件的文本。 必须定义邮件的电子邮件地址、主题和正文文本,但电子邮件不能包含附件。 有关详细信息,请参阅设计托管对象格式 (MOF) 类

  4. 创建一个事件查询用于指定要监视的事件。

    有关详细信息,请参阅使用 WQL 进行查询

  5. 创建 __EventFilter 的实例,并将查询存储在 Query 属性中。

    有关详细信息,请参阅使用 WQL 进行查询

  6. 创建 __FilterToConsumerBinding 实例以关联筛选器和使用者。

  7. 使用 Mofcomp.exe 编译 MOF 文件。

示例

此部分的示例采用 MOF 代码,但你可以使用 WMI 的脚本 APIWMI 的 COM API 以编程方式创建实例。

以下过程说明如何使用该示例。

使用示例

  1. 将以下 MOF 复制到文本文件并以 .mof 扩展名保存。

  2. 在命令提示符窗口中,使用以下命令编译 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 ;
};

使用标准使用者监视和响应事件