Windows PowerShell consente di monitorare facilmente il vostro sistema ed automatizzare la maggioranza delle operazioni di manutenzione; spesso, però, potrebbe essere utile ricevere una notifica via email dell'esito delle vostre attività, così da non dover consultare i file di log generati dai vostri script alla ricerca di criptici messaggi di errore. Fortunatamente, l'integrazione con il framework .NET ci consente di utilizzare la sofisticata architettura di spedizione dei messaggi presente all'interno di quest'ultimo e di risolvere anche questo problema.
In .NET, la classe che si occupa della spedizione delle email è SmtpClient, del namespace System.Net.Mail: eseguendo il cmdlet Get-Member su di un'istanza di tale tipo è possibile intuire come già questa stessa classe sia in grado di spedire una semplice email mediante i metodi Send() e SendAsync() (quest'ultimo è la versione asincrona del primo).
$smtpClient = New-Object System.Net.Mail.SmtpClient
# Vediamo i metodi esposti da questo tipo...
$smtpClient |
Get-Member -MemberType Method
Dà come risultato:
[...]
Name MemberType Definition
---- ---------- ----------
Equals Method System.Boolean Equals(Object obj)
GetHashCode Method System.Int32 GetHashCode()
GetType Method System.Type GetType()
Send Method System.Void Send(String from, String recipients, ...
SendAsync Method System.Void SendAsync(String from, String recipie...
[...]
Utilizzando l'overload più semplice (ce ne sono due, infatti) del metodo Send() è possibile inviare una email in formato solo testo ad uno o più destinatari, senza allegati. Prima, però, è conveniente impostare il server SMTP che verrà utilizzato per la spedizione, agendo sulla proprietà Host dell'oggetto SmtpClient.
Ecco come:
$smtpClient.Host = 'smtp.example.com'
$smtpClient.Send('me@example.com',
'you@example.com',
'Saluti da powershell.it',
"Caro amico,`nio ADORO questo sito!`nVienici anche tu!")
Le funzionalità esposte nel namespace System.Net.Mail vanno molto al di là dell'invio di una semplice email in formato testuale; nei prossimi snippet studieremo come sfruttarne alcune tra le più interessanti.