Invio di messaggi di posta elettronica in base a un evento
Usando la classe SMTPEventConsumer , è possibile inviare un messaggio di posta elettronica a un utente designato quando si verifica un evento specificato. Questa classe è un consumer di eventi standard fornito da WMI.
La classe SMTPEventConsumer richiede le condizioni seguenti per inviare un messaggio di posta elettronica in risposta a un evento:
- La classe SMTPEventConsumer deve essere compilata nello spazio dei nomi corretto. Per altre informazioni, vedere Monitoraggio e risposta agli eventi con consumer standard.
- È necessario che nella rete esista un server SMTP.
- Il messaggio di posta elettronica non può contenere un allegato.
- Il messaggio di posta elettronica deve essere codificato in US-ASCII.
La procedura di base per l'utilizzo dei consumer standard è sempre la stessa e si trova in Monitoraggio e risposta agli eventi con consumer standard. La procedura seguente aggiunge alla procedura di base; è specifico della classe SMTPEventConsumer e descrive come creare un consumer di eventi che invia messaggi di posta elettronica.
La procedura seguente descrive come creare un consumer di eventi che invia un messaggio di posta elettronica.
Per creare un consumer di eventi che invia un messaggio di posta elettronica
Installare e registrare la classe SMTPEventConsumer , se necessario.
La classe SMTPEventConsumer viene compilata nello spazio dei nomi root\subscription dal programma di installazione WMI.
Identificare l'evento che si vuole monitorare e creare la query dell'evento.
Potrebbe esserci un evento intrinseco esistente che usa per monitorare l'evento. La maggior parte degli eventi intrinseci è associata alle modifiche alle istanze della classe nello spazio dei nomi "root\cimv2". Analizzando le classi nel riferimento classi WMI, è probabilmente possibile trovare una classe che identifica l'evento da monitorare. Ad esempio, usare la classe Win32_LogicalDisk per monitorare le modifiche apportate a un'unità disco rigido.
Se non sono presenti eventi intrinseci che usano, potrebbe essere presente un provider di eventi estrini che può funzionare. Ad esempio, usare la classe RegistryTreeChangeEvent del provider del Registro di sistema per monitorare le modifiche apportate al Registro di sistema.
Se una classe non esiste che identifica l'evento che si vuole monitorare, è necessario creare un provider di eventi personalizzato e definire nuove classi di evento estrinsiche. Per altre informazioni, vedere Scrittura di un provider di eventi.
Nel file MOF (Managed Object Format) creare un'istanza di SMTPEventConsumer per ricevere gli eventi.
Utilizzare le proprietà dell'istanza per definire il messaggio di posta elettronica da inviare quando si verifica un evento. Ad esempio, la proprietà ToLine definisce l'indirizzo di posta elettronica e la proprietà Message definisce il testo del messaggio di posta elettronica. È necessario definire l'indirizzo di posta elettronica, l'oggetto e il testo di un messaggio, ma un messaggio di posta elettronica non può contenere un allegato. Per altre informazioni, vedere Progettazione di classi MOF (Managed Object Format).
Creare una query evento che specifica gli eventi da monitorare.
Per altre informazioni, vedere Esecuzione di query con WQL.
Creare un'istanza di __EventFilter e archiviare la query nella proprietà Query .
Per altre informazioni, vedere Esecuzione di query con WQL.
Creare un'istanza di __FilterToConsumerBinding per associare il filtro e il consumer.
Compilare il file MOF usando Mofcomp.exe.
Esempio
L'esempio in questa sezione si trova nel codice MOF, ma è possibile creare le istanze a livello di codice usando l'API di scripting per WMI o l'API COM per WMI.
La procedura seguente descrive come usare l'esempio.
Per usare l'esempio
Copiare il file MOF seguente in un file di testo e salvarlo con estensione mof.
In una finestra del prompt dei comandi compilare il file MOF usando il comando seguente:
Mofcomp filename**.mof**
Nota
Quando il codice MOF viene compilato nello spazio dei nomi root\subscription, SMTPEventConsumer viene compilato nello stesso spazio dei nomi.
#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 ;
};
Argomenti correlati