Partilhar via


Enviar e-mail com base em um evento

Usando a classe SMTPEventConsumer, você pode enviar email para um usuário designado quando ocorre um evento especificado. Esta 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 complementa o procedimento básico; é específico para a classe SMTPEventConsumer; e descreve como criar um consumidor de eventos que envia e-mails.

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

Para criar um consumidor de eventos que envia e-mail

  1. Instale e registe 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 seja usado para monitorar seu evento. A maioria dos eventos intrínsecos está associada a alterações em instâncias de classe no namespace "root\cimv2". Ao analisar as classes na referência Classes WMI, poderá provavelmente encontrar uma classe que identifique o evento em que pretende monitorizar. 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, você deverá criar seu próprio provedor de eventos e definir novas classes de eventos extrínsecos. Para obter mais informações, consulte Criar um Fornecedor 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 email não pode ter um anexo. Para obter mais informações, consulte Designing Managed Object Format (MOF) Classes.

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

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

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

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

    Mofcompnome do arquivo**.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 ;
};

Monitoramento e Resposta a Eventos com Consumidores Padrão