Ereignisbasiertes Senden von E-Mails
Mithilfe der Klasse SMTPEventConsumer können Sie E-Mails an einen bestimmten Benutzer senden, wenn das angegebene Ereignis auftritt. Diese Klasse ist ein standardmäßiger Ereignisconsumer, den WMI bereitstellt.
Die Klasse SMTPEventConsumer erfordert die folgenden Bedingungen, um eine E-Mail-Nachricht als Reaktion auf ein Ereignis zu senden:
- Die Klasse SMTPEventConsumer muss in den korrekten Namespace kompiliert werden. Weitere Informationen finden Sie unter Überwachen von und Reagieren auf Ereignisse mit Standardconsumern.
- Im Netzwerk muss es einen SMTP-Server geben.
- Die E-Mail-Nachricht darf keinen Anhang enthalten.
- Die E-Mail-Nachricht muss in US-ASCII codiert sein.
Das grundlegende Verfahren für die Verwendung von Standardconsumern ist immer gleich und befindet sich in Überwachen von und Reagieren auf Ereignisse mit Standardconsumern. Das folgende Verfahren wird dem Basisverfahren hinzugefügt; ist spezifisch für die Klasse SMTPEventConsumer; und beschreibt die Erstellung eines Ereignisconsumers, der E-Mails sendet.
Das folgende Verfahren beschreibt die Erstellung eines Ereignisconsumers, der E-Mails sendet.
So erstellen Sie einen Ereignisconsumer, der E-Mails sendet
Installieren und registrieren Sie die Klasse SMTPEventConsumer, wenn notwendig.
Die Klasse SMTPEventConsumer wird vom WMI-Setupprogramm in den Namespace „root\subscription“ kompiliert.
Identifizieren Sie das Ereignis, das Sie überwachen möchten, und erstellen Sie die Ereignisabfrage.
Möglicherweise gibt es ein systeminternes Ereignis, das zum Überwachen Ihres Ereignisses verwendet wird. Die meisten systeminternen Ereignisse sind mit Änderungen an Klasseninstanzen im Namespace „root\cimv2“ verbunden. Durch die Analyse der Klassen in der Referenz WMI-Klassen können Sie wahrscheinlich eine Klasse finden, die das Ereignis identifiziert, das Sie überwachen möchten. Sie können z. B. die Klasse Win32_LogicalDisk verwenden, um Änderungen auf einem Festplattenlaufwerk zu überwachen.
Wenn es keine systeminternen Ereignisse gibt, die verwendet werden können, können Sie vielleicht einen externen Ereignisanbieter verwenden. Sie können beispielsweise die Klasse RegistryTreeChangeEvent des Registrierungsanbieters verwenden, um Änderungen an der Systemregistrierung zu überwachen.
Wenn es keine Klasse gibt, die das Ereignis identifiziert, das Sie überwachen möchten, müssen Sie einen eigenen Ereignisanbieter erstellen und neue externe Ereignisklassen definieren. Weitere Informationen finden Sie unter Schreiben eines Ereignisanbieters.
Erstellen Sie in der Managed Object Format (MOF)-Datei eine Instanz von SMTPEventConsumer, um Ereignisse zu empfangen.
Verwenden Sie die Eigenschaften der Instanz, um die E-Mail-Nachricht zu definieren, die gesendet werden soll, wenn ein Ereignis auftritt. Beispielsweise definiert die Eigenschaft ToLine die E-Mail-Adresse und die Eigenschaft Message den Text der E-Mail-Nachricht. Sie müssen die E-Mail-Adresse, den Betreff und den Text der Nachricht definieren. Die E-Mail-Nachricht darf jedoch keine Anlage enthalten. Weitere Informationen finden Sie unter Entwerfen von MOF-Klassen (Managed Object Format).
Erstellen Sie eine Ereignisabfrage, die die Ereignisse angibt, die Sie überwachen möchten.
Weitere Informationen finden Sie unter Abfragen mit WQL.
Erstellen Sie eine Instanz von __EventFilter, und speichern Sie Ihre Abfrage in der Eigenschaft Query.
Weitere Informationen finden Sie unter Abfragen mit WQL.
Erstellen Sie eine Instanz von __FilterToConsumerBinding, um den Filter und den Consumer zuzuordnen.
Kompilieren Sie die MOF-Datei mithilfe von Mofcomp.exe.
Beispiel
Das Beispiel in diesem Abschnitt verwendet MOF-Code, Sie können die Instanzen aber auch programmgesteuert erstellen, indem Sie die Skript-API für WMI oder die COM-API für WMI verwenden.
Im Folgenden wird die Verwendung des Beispiels näher beschrieben.
So verwenden Sie das Beispiel
Kopieren Sie den folgenden MOF-Code in eine Textdatei, und speichern Sie diese mit der Erweiterung .mof.
Kompilieren Sie die MOF-Datei in einem Eingabeaufforderungsfenster mithilfe des folgenden Befehls:
Mofcomp filename**.mof**
Hinweis
Wenn der MOF-Code in den Namespace „root\subscription“ kompiliert wird, wird SMTPEventConsumer in denselben Namespace kompiliert.
#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 ;
};
Zugehörige Themen