Press "Enter" to skip to content

Uno snippet per spedire un e-mail tramite SMTP Server

Oggi sto lavorando su una piccola applicazione che, fra le altre cose, ha il compito di notificare ad alcuni utenti l’arrivo di dati da un server ftp.

L’applicazione ascolta la cartella di arrivo del server ftp in modo diretto tramite un file system watcher e quando un file viene ricevuto, lo sposta nella giusta sede e notifica agli utenti l’arrivo dei nuovi dati.

La notifica viene spedita via e-mail. Spedire un e-mail usando .NET è molto facile, ma cercando uno snippet che lo facesse sul web non ho trovato alcun esempio semplice, pertanto ne ho scritto uno qui in modo che se a qualcuno serve è pronto.

              //Metodo di trasmissione email
public void Send( string pUser, string pPassword ) { //predispone l’inidirzzo del mittente MailAddress from = new MailAddress("noreply@mydomain.com"); //predispone l’indirizzo destinatario, se ne avete più di uno basta aggiungerlo //alle collezioni To, CC or BCC della classe MailMessage MailAddress to = new MailAddress("recipientuser@hisdomain.com"); //Creo il messaggio MailMessage msg = new MailMessage(); //Metto il mittente negli indirizzi from, mittente, risposta msg.From = from; msg.Sender = from; msg.ReplyTo = from; //Metto il destinatario nella collezione msg.To.Add(to); //predispongo l’oggetto msg.Subject = "Subject of my message"; //Do al messaggio una priorità msg.Priority = MailPriority.Normal; //indico se il messaggio è un testo o un HTML msg.IsBodyHtml = false; //Scrivo il corpo del messaggio msg.Body = "Simple text message body"; //Aggiungo un attachment di esempio if (File.Exists("c:\\myattachment.xml") { msg.Attachments.Add(new Attachment("c:\\myattachment.xml")); } //Genero il client SMTP indicando l’indirizzo del server SmtpClient smtp = new SmtpClient("mail.mydomain.local"); //indico il metodo di trasmissione smtp.DeliveryMethod = SmtpDeliveryMethod.Network; //Qui è possibile anche modificare la porta se necessario //Se il server richiede le credenziali, le indichiamo qui if (pUser != null && pUser.Trim().Length > 0) { smtp.UseDefaultCredentials = false; smtp.Credentials = new NetworkCredential(pUser, pPassword); } //E spediamo il messaggio smtp.Send(msg); }

Se il messaggio che dovete spedire è in  HTML basta cambiare 2 righe:

                //Indicate if it is an html or text message
                msg.IsBodyHtml = true;
                //Set the message body
                msg.Body = "<html><body><p>Simple HTML message body.</p></body></html>";

è ovvio che tutte le stringhe della funzione di esempio le sostituirete con opportuni parametri e magari i dati del server li metterete nei setting applicativi così da creare una applicazione più flessibile. Buon lavoro.