다음을 통해 공유


이벤트를 기반으로 전자 메일 보내기

SMTPEventConsumer 클래스를 사용하면 지정된 이벤트가 발생할 때 지정된 사용자에게 전자 메일을 보낼 수 있습니다. 이 클래스는 WMI에서 제공하는 표준 이벤트 소비자입니다.

SMTPEventConsumer 클래스가 이벤트에 대한 응답으로 이메일 메시지를 보내기 위해 필요한 조건은 다음과 같습니다.

표준 소비자를 사용하기 위한 기본 프로시저는 항상 동일하며 표준 소비자를 사용하여 이벤트 모니터링 및 응답에서 확인할 수 있습니다. 다음 프로시저는 기본 프로시저에 추가되고 SMTPEventConsumer 클래스에만 적용되며 전자 메일을 보내는 이벤트 소비자를 만드는 방법을 설명합니다.

다음 절차에서는 전자 메일을 보내는 이벤트 소비자를 만드는 방법을 설명합니다.

전자 메일을 보내는 이벤트 소비자를 만들려면

  1. 필요하다면 SMTPEventConsumer 클래스를 설치하고 등록합니다.

    SMTPEventConsumer 클래스는 WMI 설치 프로그램에 의해 root\subscription 네임스페이스로 컴파일됩니다.

  2. 이벤트 쿼리를 모니터링하고 만들려는 이벤트를 식별합니다.

    이벤트를 모니터링하는 데 사용하는 기존 내장 이벤트가 있을 수 있습니다. 대부분의 내장 이벤트는 ‘root\cimv2’ 네임스페이스의 클래스 인스턴스 변경 내용과 연결됩니다. WMI 클래스 참조에서 클래스를 분석하면 모니터링하려는 이벤트를 식별하는 클래스를 찾을 수 있습니다. 예를 들어 Win32_LogicalDisk 클래스를 사용하여 하드 디스크 드라이브의 변경 내용을 모니터링합니다.

    을(를) 사용하는 기존 내장 이벤트가 없는 경우 작동할 수 있는 외래 이벤트 공급자가 있을 수 있습니다. 예를 들어 레지스트리 공급자의 RegistryTreeChangeEvent 클래스를 사용하여 시스템 레지스트리에 대한 변경 내용을 모니터링합니다.

    모니터링할 이벤트를 식별하는 클래스가 없는 경우 고유한 이벤트 공급자를 만들고 새 외래 이벤트 클래스를 정의해야 합니다. 자세한 내용은 이벤트 공급자 작성을 참조하세요.

  3. MOF(Managed Object Format) 파일에서 이벤트를 받을 SMTPEventConsumer의 인스턴스를 만듭니다.

    인스턴스의 속성을 사용하여 이벤트가 발생할 때 보낼 전자 메일 메시지를 정의합니다. 예를 들어 ToLine 속성은 이메일 주소를 정의하며 Message 속성은 이메일 메시지의 텍스트를 정의합니다. 메시지의 이메일 주소, 제목 및 텍스트를 정의해야 하지만 이메일 메시지에는 첨부 파일이 존재할 수 없습니다. 자세한 내용은 MOF(Managed Object Format) 클래스 디자인을 참조하세요.

  4. 모니터링할 이벤트를 지정하는 이벤트 쿼리를 만듭니다.

    자세한 내용은 WQL을 사용하여 쿼리를 참조하세요.

  5. __EventFilter의 인스턴스를 만들고 쿼리를 Query 속성에 저장합니다.

    자세한 내용은 WQL을 사용하여 쿼리를 참조하세요.

  6. 필터와 소비자를 연결할 __FilterToConsumerBinding의 인스턴스를 만듭니다.

  7. Mofcomp.exe를 사용하여 MOF 파일을 컴파일합니다.

이 섹션의 예제는 MOF 코드에 있지만 WMI용 스크립팅 API 또는 WMI용 COM API를 사용하여 프로그래밍 방식으로 인스턴스를 만들 수 있습니다.

다음 절차에서는 예제를 사용하는 방법을 설명합니다.

예제를 사용하려면

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

표준 소비자를 사용하여 이벤트 모니터링 및 응답