08/09/2008

Inviare email da Windows PowerShell

A cura di Efran Cobisi


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.

Commenti


06/10/2008 17.21
ramones1985: con allegato...
$SMTPserver = "MAIL.xxx.com"
$mailer = New-Object Net.Mail.SMTPclient($SMTPserver)
$msg = New-Object Net.Mail.MailMessage("MailMittente", "MailDestinatario", "Oggetto Mail", "TestoMail")
$msg.Attachments.Add($prova) <-- ($prova = File da allegare!!)
$mailer.Send($msg)
$msg.Attachments.Dispose()
30/05/2011 21.22
dadefonta: thanks
molto utile grazie mille :)


EmailVerify.NET is a Microsoft .NET software component that validates e-mail addresses. valid email