Inviare email con allegati
Invio Email tramite ASP.NET e protocollo SMTP
Introduzione:
Mostreremo oggi come inviare email con allegati usando unserver SMTP, configurato appositamente. Il namespacesSystem.Web.Mail fornisce classi utili per inviare mail in.NET, in particolare la MailMessage, che gestisce ilcontenuto di un messaggio email e MailAttachment, chegestisce gli allegati.
Impostare il server SMTP:
Prima di iniziare a sviluppare l' applicazione, dobbiamoimpostare alcuni settaggi relativi al server SMTP:
- Accertartiamoci che sia funzionante; nel caso non lo sia, apriamo IIS, guardiamo in "Local Computer" (sulla sinistra) e, al suo interno, spostiamoci in "Default SMTP Vitual Server"; nel caso non risulti installato alcun server SMTP, dovremo avviarne l' installazione.
- Per configurare la scheda "Default SMTP Virtual Server" , clikkiamoci sopra con il tasto destro, andiamo in "Proprerties" e lì, spostiamoci nella tab "Access"; troveremo il pulsante "Relay" , che dovremo premere. A questo punto, con il radio button "Only the list below" , dovremmo vedere l' IP "127.0.0.1".
- Se stiamo usando "localhost" o "127.0.0.1" come SmtpMail.SmtpServer, dobbiamo accertarci che il box "Anonymous access is allowed" sia spuntato. Per permettere tale accesso, apriamo IIS, torniamo in SMTP Virtual Server, clikkiamoci con il destro e scegliamo "Properties". Nella tab "Access" , clikkiamo il bottone "Authentication" , ove dovremo chekkare "Anonymous Access"
Gli oggetti:
Ora, come prima cosa, dobbiamo creare un nuovo oggetto per laclasse MaiLMessage, che chiameremo"mailMessage". A questo punto abbiamo daimpostare le proprietà From, To, Cc, Bcc, Subject,Body e BodyFormat che riempiremo con ciòche l' utente ha inserito nei vari campi della form,creata in precedenza in normale codice HTML:
/* Crea un nuovo MailMessage */ MailMessage mailMessage = new MailMessage (); mailMessage.From = txtSender.Text; mailMessage.To = txtReceiver.Text; mailMessage.Cc = txtCc.Text; mailMessage.Bcc = txtBcc.Text; mailMessage.Subject = txtSubject.Text; mailMessage.Body = txtBody.Text; /* Imposta le proprietà di MailMessage con i valori inseriti nella form */ if (rblMailFormat.SelectedItem.Text == "Text") mailMessage.BodyFormat = MailFormat.Text; else mailMessage.BodyFormat = MailFormat.Html;
Creare Allegati:
Per creare allegati, dovremo usare la classeMailAttachment, per la quale creiamo un oggettoattach. Con il codice seguente, apriremo una finestradi dialogo che permetterà all' utente di sceglierequale file, presente sul suo PC, allegare; a questo punto ilfile verrà caricato sul server e aggiunto alla mail infunzione di allegato:
/* Inizio del processo di Allega File & */if (inpAttachment1.PostedFile != null){/* Prende il contenuto di PostedFile */HttpPostedFile attFile = inpAttachment1.PostedFile; /* Prende la dimensione del file */ int attachFileLength = attFile.ContentLength; /* Si accerta che la sua dimensione è > 0 */ if (attachFileLength > 0) { /* Prende il nome del file */ strFileName = Path.GetFileName(inpAttachment1.PostedFile.FileName); /* Salva il file sul server */ inpAttachment1.PostedFile.SaveAs(Server.MapPath(strFileName)); /* Crea un' allegato di tale file */ MailAttachment attach = new MailAttachment(Server.MapPath(strFileName)); /* Imposta tale allegato nella mail precedente */ mailMessage.Attachments.Add(attach); /* Salva il nome dell' allegato, per poterlo cancellare dal server successivamente */ attach1 = strFileName; }}
Inviamo ora la mail con allegato:
SmtpMail.SmtpServer = "127.0.0.1";(Or)SmtpMail.SmtpServer.Insert(0,"127.0.0.1");SmtpMail.Send (mailMessage);
Infine, eliminiamo l' allegato dal server:
/* Cancella l' allegato */ if (attach1 != null) File.Delete(Server.MapPath(attach1)); if (attach2 != null) File.Delete(Server.MapPath(attach2)); if (attach3 != null) File.Delete(Server.MapPath(attach3));
Vediamo ora alcune strade per impostare un server SMTPtramite codice:
SmtpMail.SmtpServer = "localhost"
o
SmtpMail.SmtpServer = "127.0.0.1"
o
SmtpMail.SmtpServer.Insert( 0, "127.0.0.1 o il nome del server")
Sono 3 strade entrambe valide efunzionanti, nelle quali, ovviamente, andrà sostituitoil valore"Localhost"/"127.0.0.1" conil nome/l' IP del server SMTP da usare.
Disponibile per il download, la