イベントに基づいて Email を送信する

SMTPEventConsumer クラスを使用すると、指定したイベントが発生したときに、指定されたユーザーに電子メールを送信できます。 このクラスは、WMI に用意されている標準的なイベント コンシューマーです。

SMTPEventConsumer クラスでは、イベントに応答して電子メール メッセージを送信するには、次の条件が必要です。

  • SMTPEventConsumer クラスは、正しい名前空間にコンパイルする必要があります。 詳細については、「標準コンシューマーを使用したイベントの監視と対応」を参照してください。
  • SMTP サーバーはネットワーク上に存在する必要があります。
  • 電子メール メッセージに添付ファイルを含めることはできません。
  • 電子メール メッセージは US-ASCII でエンコードする必要があります。

標準コンシューマーを使用する基本手順は常に同じであり、「標準コンシューマーによるイベントの監視と対応」に記載されています。 次の手順は基本手順の追加であり、SMTPEventConsumer クラスに固有です。ここでは、電子メールを送信するイベント コンシューマーを作成する方法について説明します。

次の手順では、電子メールを送信するイベント コンシューマーを作成する方法について説明します。

電子メールを送信するイベント コンシューマーを作成するには

  1. 必要に応じて、SMTPEventConsumer クラスをインストールして登録します。

    SMTPEventConsumer クラスは、WMI セットアップ プログラムによって root\subscription 名前空間にコンパイルされます。

  2. 監視するイベントを特定し、イベント クエリを作成します。

    イベントの監視に使用される既存の内部イベントが存在する可能性があります。 ほとんどの内部イベントは、"root\cimv2" 名前空間のクラス インスタンスへの変更に関連しています。 WMI クラス リファレンスを分析することで、監視するイベントを識別するクラスを見つけることができる可能性があります。 たとえば、Win32_LogicalDisk クラスを使用して、ハード ディスク ドライブへの変更を監視します。

    使用する既存の内部イベントがない場合は、動作する外部イベント プロバイダーが存在する可能性があります。 たとえば、レジストリ プロバイダーの RegistryTreeChangeEvent クラスを使用して、システム レジストリへの変更を監視します。

    監視するイベントを識別するクラスが存在しない場合は、独自のイベント プロバイダーを作成し、新しい外部イベント クラスを定義する必要があります。 詳細については、「イベント プロバイダーの作成」を参照してください。

  3. Managed Object Format (MOF) ファイルで、イベントを受信する SMTPEventConsumer のインスタンスを作成します。

    インスタンスのプロパティを使用して、イベントが発生したときに送信する電子メール メッセージを定義します。 たとえば、ToLine プロパティは電子メール アドレスを定義し、Message プロパティは電子メール メッセージのテキストを定義します。 メッセージのメール アドレス、件名、テキストを定義する必要がありますが、電子メール メッセージに添付ファイルを含めることはできません。 詳細については、Managed Object Format (MOF) クラスの設計に関するページを参照してください。

  4. 監視するイベントを指定するイベント クエリを作成します。

    詳細については、「WQL を使用したクエリ」を参照してください。

  5. __EventFilter のインスタンスを作成し、クエリを Query プロパティに格納します。

    詳細については、「WQL を使用したクエリ」を参照してください。

  6. __FilterToConsumerBinding のインスタンスを作成して、フィルターとコンシューマーを関連付けます。

  7. Mofcomp.exe を使用して MOF ファイルをコンパイルします。

このセクションの例は MOF コードにありますが、WMI 用スクリプト API または WMI 用 COM API を使用して、プログラムでインスタンスを作成できます。

以下の手順では、例の使用方法を説明します。

例を使用するには

  1. 以下の MOF をテキスト ファイルにコピーし、.mof 拡張子で保存します。

  2. コマンド ウィンドウで、次のコマンドを使用して MOF ファイルをコンパイルします。

    Mofcompfilename**.mof**

Note

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

標準コンシューマーを使用したイベントの監視と対応