イベントに基づく電子メールの送信
SMTPEventConsumer クラスを使用すると、特定のイベントが発生したときに指定されたユーザーに電子メールを送信することができます。 このクラスは、WMI が提供する標準的なイベント コンシューマーです。
SMTPEventConsumer クラスでは、イベントに応答して電子メール メッセージを送信するには、次の条件必を満たす必要があります。
- SMTPEventConsumer クラスが、適切な名前空間にコンパイルされている必要があります。 詳細については、「標準コンシューマーを使用したイベントの監視と応答」を参照してください。
- SMTP サーバーがネットワーク上に存在している必要があります。
- 電子メール メッセージに添付ファイルを含めることはできません。
- 電子メール メッセージは US-ASCII でエンコードされている必要があります。
標準コンシューマーを使用するための基本的な手順は常に同じであり、「標準コンシューマーを使用したイベントの監視と対応」に記載されています。 次の手順は基本手順の追加であり、SMTPEventConsumer クラスに固有です。ここでは、電子メールを送信するイベント コンシューマーを作成する方法について説明します。
次の手順では、電子メールを送信するイベント コンシューマーを作成する方法について説明します。
電子メールを送信するイベント コンシューマーを作成する方法
必要に応じて、SMTPEventConsumer クラスをインストールして登録します。
SMTPEventConsumer クラスは、WMI セットアップ プログラムによって root\subscription 名前空間にコンパイルされます。
監視するイベントを特定し、イベント クエリを作成します。
イベントの監視に使用する既存の組み込みイベントが存在する可能性があります。 ほとんどの組み込みイベントは、"root\cimv2" 名前空間内のクラス インスタンスへの変更に関連付けられています。 WMI クラス リファレンスのクラスを分析することで、監視するイベントを識別するクラスを恐らく見つけることができます。 たとえば、ハード ディスク ドライブへの変更を監視するには、Win32_LogicalDisk クラスを使用します。
使用する既存の組み込みイベントがない場合は、機能する外部イベント プロバイダーが存在することがあります。 たとえば、システム レジストリへの変更を監視するには、レジストリ プロバイダーの RegistryTreeChangeEvent クラスを使用します。
監視するイベントを識別するクラスが存在しない場合は、独自のイベント プロバイダーを作成し、新しい外部イベント クラスを定義する必要があります。 詳細については、「イベント プロバイダーの記述」を参照してください。
Managed Object Format (MOF) ファイルで、イベントを受信する SMTPEventConsumer のインスタンスを作成します。
インスタンスのプロパティを使用して、イベントが発生したときに送信する電子メール メッセージを定義します。 たとえば、ToLine プロパティは電子メール アドレスを定義し、Message プロパティは電子メール メッセージのテキストを定義します。 メッセージのメール アドレス、件名、テキストを定義する必要がありますが、電子メール メッセージに添付ファイルを含めることはできません。 詳細については、「管理オブジェクトフォーマット (MOF) クラスの設計」を参照してください。
監視するイベントを指定するイベント クエリを作成します。
詳細については、「WQL を使用したクエリの実行」を参照してください。
__EventFilter のインスタンスを作成し、クエリを Query プロパティに格納します。
詳細については、「WQL を使用したクエリの実行」を参照してください。
フィルターとコンシューマーを関連付ける __FilterToConsumerBinding のインスタンスを作成します。
Mofcomp.exe を使用して MOF ファイルをコンパイルします。
例
このセクションのサンプルは MOF コードですが、WMI 用のスクリプト API または WMI 用の COM API を使用してプログラムでインスタンスを作成することができます。
サンプルの使用方法を次の手順で説明します。
サンプルを使用する方法
次の MOF をテキスト ファイルにコピーし、.mof の拡張子を付けて保存します。
コマンド プロンプト ウィンドウで、次のコマンドを使用して MOF ファイルをコンパイルします。
Mofcomp filename**.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 ;
};
関連トピック