Envoi d’un email basé sur un événement
En utilisant la classe SMTPEventConsumer, vous pouvez envoyer un email à un utilisateur désigné lorsqu’un événement spécifié se produit. Cette classe est un consommateur d’événements standard fourni par WMI.
La classe SMTPEventConsumer nécessite les conditions suivantes pour envoyer un message email en réponse à un événement :
- La classe SMTPEventConsumer doit être compilée dans le bon espace de noms. Pour plus d’informations, veuillez consulter la section Surveillance et réponse aux événements avec des consommateurs standard.
- Un serveur SMTP doit exister sur le réseau.
- Le message email ne peut pas avoir de pièce jointe.
- Le message email doit être encodé en US-ASCII.
La procédure de base pour utiliser les consommateurs standard est toujours la même, et se trouve dans Surveillance et réponse aux événements avec des consommateurs standard. La procédure suivante s’ajoute à la procédure de base ; elle est spécifique à la classe SMTPEventConsumer ; et décrit comment créer un consommateur d’événements qui envoie des emails.
La procédure suivante décrit comment créer un consommateur d’événements qui envoie des emails.
Pour créer un consommateur d’événements qui envoie des emails
Installez et enregistrez la classe SMTPEventConsumer, si nécessaire.
La classe SMTPEventConsumer est compilée dans l’espace de noms root\subscription par le programme d’installation WMI.
Identifiez l’événement que vous souhaitez surveiller et créez la requête d’événement.
Il peut exister un événement intrinsèque existant que vous pouvez utiliser pour surveiller votre événement. La plupart des événements intrinsèques sont associés à des changements des instances de classe dans l’espace de noms "root\cimv2". En analysant les classes dans la référence Classes WMI, vous pouvez probablement trouver une classe qui identifie l’événement que vous souhaitez surveiller. Par exemple, utilisez la classe Win32_LogicalDisk pour surveiller les changements d’un disque dur.
S’il n’existe pas d’événements intrinsèques existants que vous pouvez utiliser, il peut exister un fournisseur d’événements extrinsèques qui peut fonctionner. Par exemple, utilisez la classe RegistryTreeChangeEvent du fournisseur de registre pour surveiller les changements du registre système.
Si une classe n’existe pas pour identifier l’événement que vous souhaitez surveiller, vous devez créer votre propre fournisseur d’événements et définir de nouvelles classes d’événements extrinsèques. Pour plus d’informations, consultez Écriture d’un fournisseur d’événements.
Dans le fichier Managed Object Format (MOF), créez une instance de la classe SMTPEventConsumer pour recevoir les événements.
Utilisez les propriétés de l’instance pour définir le message email à envoyer lorsqu’un événement se produit. Par exemple, la propriété ToLine définit l’adresse email, et la propriété Message définit le texte du message email. Vous devez définir l’adresse email, l’objet et le texte d’un message, mais un message email ne peut pas avoir de pièce jointe. Pour plus d’informations, consultez Conception des classes format MOF (Managed Object Format).
Créez une requête d’événement qui spécifie les événements que vous souhaitez surveiller.
Pour plus d’informations, consultez Requêtes avec WQL.
Créez une instance de __EventFilter et stockez votre requête dans la propriété Query.
Pour plus d’informations, consultez Requêtes avec WQL.
Créez une instance de __FilterToConsumerBinding pour associer le filtre et le consommateur.
Compilez le fichier MOF en utilisant Mofcomp.exe.
Exemple
L’exemple dans cette section est en code MOF, mais vous pouvez créer les instances de manière programmatique en utilisant l’API de script pour WMI ou l’API COM pour WMI.
La procédure suivante décrit comment utiliser l’exemple.
Pour utiliser l’exemple
Copiez le MOF suivant dans un fichier texte et enregistrez-le avec une extension .mof.
Dans une fenêtre d’invite de commandes, compilez le fichier MOF en utilisant la commande suivante :
Mofcomp nomdefichier**.mof**
Remarque
Lorsque le code MOF est compilé dans l’espace de noms root\subscription, le SMTPEventConsumer est compilé dans le même espace de noms.
#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 ;
};
Rubriques connexes