Enviar emails com base em um evento

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

A classe SMTPEventConsumer exige 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 Como monitorar e responder 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 evento que envia email.

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

Para criar um consumidor de evento que envia emails

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

    A classe SMTPEventConsumer é compilada no namespace root\subscription 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 usado que use para monitorar seu 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 do WMI, você provavelmente pode encontrar uma classe que identifique o evento que 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 as 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, confira Como gravar 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, confira Como projetar classes MOF (Managed Object Format).

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

    Para obter mais informações, confira Como consultar com WQL.

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

    Para obter mais informações, confira Como consultar 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 do MOF, mas você pode criar as instâncias programaticamente usando a API de Script 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 comando a seguir:

    Mofcompfilename**.mof**

Observação

Quando o código MOF é compilado no namespace root\subscription, 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 ;
};

Como monitorar e responder a eventos com consumidores padrão