Enviando email com base em um evento

Usando a classe SMTPEventConsumer , você pode enviar email para um usuário designado quando ocorrer um evento especificado. Essa classe é um consumidor de eventos padrão que o WMI fornece.

A classe SMTPEventConsumer requer as seguintes condições para enviar uma mensagem de email em resposta a um evento:

O procedimento básico para usar consumidores padrão é sempre o mesmo e está localizado em Monitoramento e Resposta a Eventos com Consumidores Padrão. O procedimento a seguir adiciona ao procedimento básico; é específico para a classe SMTPEventConsumer ; e descreve como criar um consumidor de eventos que envia email.

O procedimento a seguir descreve como criar um consumidor de eventos que envia email.

Para criar um consumidor de eventos que envia email

  1. Instale e registre a classe SMTPEventConsumer , se necessário.

    A classe SMTPEventConsumer é compilada no namespace raiz\assinatura pelo programa de instalação do WMI.

  2. Identifique o evento que você deseja monitorar e crie a consulta de evento.

    Pode haver um evento intrínseco existente que usa para monitorar o evento. A maioria dos eventos intrínsecos está associada a alterações nas instâncias de classe no namespace "root\cimv2". Analisando as classes na referência de Classes WMI , você provavelmente pode encontrar uma classe que identifica o evento que você deseja monitorar. Por exemplo, use a classe Win32_LogicalDisk para monitorar alterações em uma unidade de disco rígido.

    Se não houver eventos intrínsecos existentes que usem, pode haver um provedor de eventos extrínsecos que possa funcionar. Por exemplo, use a classe RegistryTreeChangeEvent do provedor do Registro para monitorar alterações no registro do sistema.

    Se não existir uma classe que identifique o evento que você deseja monitorar, crie seu próprio provedor de eventos e defina novas classes de evento extrínsecas. Para obter mais informações, consulte Escrever um provedor de eventos.

  3. No arquivo MOF (Managed Object Format), crie uma instância do SMTPEventConsumer para receber eventos.

    Use as propriedades da instância para definir a mensagem de email a ser enviada quando ocorrer um evento. Por exemplo, a propriedade ToLine define o endereço de email e a propriedade Message define o texto da mensagem de email. Você deve definir o endereço de email, o assunto e o texto de uma mensagem, mas uma mensagem de email não pode ter um anexo. Para obter mais informações, consulte Como criar classes MOF (Formato de Objeto Gerenciado).

  4. Crie uma consulta de evento que especifica os eventos que você deseja monitorar.

    Para obter mais informações, consulte Consulta com WQL.

  5. Crie uma instância de __EventFilter e armazene sua consulta na propriedade Query .

    Para obter mais informações, consulte consulta com WQL.

  6. Crie uma instância de __FilterToConsumerBinding para associar o filtro e o consumidor.

  7. Compile o arquivo MOF usando Mofcomp.exe.

Exemplo

O exemplo nesta seção está no código MOF, mas você pode criar as instâncias programaticamente usando a API de Scripts para WMI ou a API COM para WMI.

O procedimento a seguir descreve como usar o exemplo.

Para usar o exemplo

  1. Copie o MOF a seguir para um arquivo de texto e salve-o com uma extensão .mof.

  2. Em uma janela de prompt de comando, compile o arquivo MOF usando o seguinte comando:

    Mofcompfilename**.mof**

Observação

Quando o código MOF é compilado no namespace raiz\assinatura, o SMTPEventConsumer é compilado no mesmo namespace.

 

#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 ;
};

Monitoramento e resposta a eventos com consumidores padrão