Envio de e-mail 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 evento 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 Monitorando e respondendo a eventos com consumidores padrão. O procedimento a seguir complementa o 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 emails.

Para criar um consumidor de eventos que envia e-mails

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

    A classe SMTPEventConsumer é compilada no namespace root\subscription pelo programa de instalação WMI.

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

    Pode haver um evento intrínseco existente que é usado para monitorar seu evento. A maioria dos eventos intrínsecos está associada a alterações nas instâncias de classe no namespace "root\cimv2". Ao analisar as classes na referência de Classes WMI, você provavelmente poderá 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 sejam usados, 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, você deverá criar seu próprio provedor de eventos e definir novas classes de eventos extrínsecos. Para obter mais informações, confira 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 e-mail, o assunto e o texto de uma mensagem, mas uma mensagem de e-mail não pode ter um anexo. Para obter mais informações, confira Como criar classes MOF (Managed Object Format).

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

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

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

    Para obter mais informações, consulte 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 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:

    Nome do arquivoMofcomp**.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 ;
};

Monitorando e respondendo a eventos com consumidores padrão