Поделиться через


Отправка сообщения электронной почты на основе события

Используя класс SMTPEventConsumer , вы можете отправить сообщение электронной почты указанному пользователю при возникновении указанного события. Этот класс является стандартным потребителем событий, который предоставляет WMI.

Класс SMTPEventConsumer требует следующих условий для отправки сообщения электронной почты в ответ на событие:

Базовая процедура использования стандартных потребителей всегда одинакова и находится в разделе "Мониторинг и реагирование на события со стандартными потребителями". Следующая процедура добавляется к базовой процедуре; используется для класса SMTPEventConsumer , а также описывается создание потребителя событий, отправляющего сообщение электронной почты.

В следующей процедуре описывается создание потребителя события, отправляющего сообщение электронной почты.

Создание потребителя события, отправляющего сообщение электронной почты

  1. При необходимости установите и зарегистрируйте класс SMTPEventConsumer .

    Класс SMTPEventConsumer компилируется в пространство имен root\subscription программой установки WMI.

  2. Определите событие, которое необходимо отслеживать и создать запрос на событие.

    Может существовать существующее встроенное событие, которое используется для мониторинга события. Большинство встроенных событий связаны с изменениями экземпляров классов в пространстве имен root\cimv2. Анализируя классы в справочнике по классам WMI, можно найти класс, определяющий событие, которое требуется отслеживать. Например, используйте класс Win32_LogicalDisk для отслеживания изменений жесткого диска.

    Если нет существующих встроенных событий, которые используются, может быть поставщик событий экстринсического объекта, который может работать. Например, используйте класс RegistryTreeChangeEvent поставщика реестра для отслеживания изменений в системный реестр.

    Если класс не существует, идентифицирующий событие, которое требуется отслеживать, необходимо создать собственный поставщик событий и определить новые классы событий экстринсов. Дополнительные сведения см. в статье "Запись поставщика событий".

  3. В файле "Формат управляемого объекта" (MOF) создайте экземпляр SMTPEventConsumer для получения событий.

    Используйте свойства экземпляра, чтобы определить сообщение электронной почты для отправки при возникновении события. Например, свойство ToLine определяет адрес электронной почты, а свойство Message определяет текст сообщения электронной почты. Необходимо определить адрес электронной почты, тему и текст сообщения, но сообщение электронной почты не может содержать вложение. Дополнительные сведения см. в разделе "Проектирование классов управляемого объекта (MOF).

  4. Создайте запрос события, указывающий события, которые необходимо отслеживать.

    Дополнительные сведения см. в статье "Запросы с помощью WQL".

  5. Создайте экземпляр __EventFilter и сохраните запрос в свойстве Query .

    Дополнительные сведения см. в статье "Запросы с помощью WQL".

  6. Создайте экземпляр __FilterToConsumerBinding для связывания фильтра и потребителя.

  7. Скомпилируйте MOF-файл с помощью Mofcomp.exe.

Пример

Пример в этом разделе приведен в коде MOF, но вы можете создавать экземпляры программным способом с помощью API скриптов для WMI или COM-API для WMI.

В следующей процедуре описывается, как использовать пример.

Использование примера

  1. Скопируйте следующий MOF-файл в текстовый файл и сохраните его с расширением MOF.

  2. В окне командной строки скомпилируйте 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 ;
};

Мониторинг и реагирование на события с помощью стандартных потребителей