Oggi voglio mettervi ha disposizione una funzione che vi permette di inviare una Email SMTP con autenticazione SSL da C# e (VB.NET) in formato HTML aggiungendo dei file nell’email.
In precedenza avevo ovviato al problema utilizzato questo codice, potete leggere il Post precedente Leggi Qui , ma mi sono accorto che non funge con i server SMTP che richiedono l’autenticazione SSL obbligatoria o SSL Implicita. Dopo un’po’ da un errore di Timeout. Qui di seguito vi è un blog che spiega bene : http://www.systemnetmail.com/faq/5.3.aspx
Passiamo ai parametri da configurare (ATTENZIONE!! Per ovviare al problema sono stato costretto ad utilizzare una funzione DEPRECATA System.Web.Mail, ma questo non cambia niente, se no l’alternativa era di crearmi una dll che risolvesse la carenza di System.Net.Mail) :
Importiamo nei riferimenti il seguente oggetto, (ATTENZIONE!!! Controllate che si trovi nei Riferimenti):
using System.Web;
Ora scriviamo la seguente funzione :
InvioPro("[email protected]","[email protected]","Subject Test SMTP",""<br> Test SMTP Client <br><br> HELLO";"); private void InvioEmailSMTP_SSL(form string, to string, subject string, body string) { try{ System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage(); mail.To = to; mail.From = form; mail.Subject = subject ; mail.Body = body; mail.BodyFormat = System.Web.Mail.MailFormat.Html; mail.Priority = System.Web.Mail.MailPriority.High; mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", "smtp.libero.it"); mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465); mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 2); mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1); mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl",true); mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "[email protected]"); mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "[email protected]"); try { System.Web.Mail.SmtpMail.Send(mail); } catch (HttpException ehttp) { Console.WriteLine("{0}", ehttp.Message); Console.WriteLine("Here is the full error message output"); Console.Write("{0}", ehttp.ToString()); } } catch(System.Exception e) { Console.WriteLine("Unknown Exception occurred {0}", e.Message); Console.WriteLine("Here is the Full Message output"); Console.WriteLine("{0}", e.ToString()); } //end function }
Fino adesso abbiamo solo preparata la funzione base che può ricevere il corpo dell’email nel formato HTML e comunicare con il Server SMTP e stabilire una connessione SSL.
Se vogliamo aggiungere gli allegati dobbiamo inserire questa porzione di codice dopo la configurazione dei mail.Fields.Add(…);
// Creare il INLINE string attachmentPath = @"C:\PrivacyFix.jpg"; //Mettere allegati all'email MailAttachment attachment = new MailAttachment(attachmentPath,System.Web.Mail.MailEncoding.Base64); //create the attachment mail.Attachments.Add(attachment); //add the attachment
Ricordo che attualmente non c’è nessun modo che io conosca per far funzione l’invio dell’email sfruttando l’oggetto System.Net.Mail con la connessione SSL Implicita.
Includo una versione VB.NET da migliorare ma funzionante.
Public Class Mail Private Const SMTP_SERVER As String = "http://schemas.microsoft.com/cdo/configuration/smtpserver" Private Const SMTP_SERVER_PORT As String = "http://schemas.microsoft.com/cdo/configuration/smtpserverport" Private Const SEND_USING As String = "http://schemas.microsoft.com/cdo/configuration/sendusing" Private Const SMTP_USE_SSL As String = "http://schemas.microsoft.com/cdo/configuration/smtpusessl" Private Const SMTP_AUTHENTICATE As String = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" Private Const SEND_USERNAME As String = "http://schemas.microsoft.com/cdo/configuration/sendusername" Private Const SEND_PASSWORD As String = "http://schemas.microsoft.com/cdo/configuration/sendpassword" Dim Mail As System.Web.Mail.MailMessage Public ServerSmtp As String Public UseSSL As Boolean Public username As String Public password As String Public Receiver As String Public Sender As String Public Subject As String Public Body As String Public isHtml As Boolean Public pathAllegato As String Public Sub New() Mail = New System.Web.Mail.MailMessage End Sub Public Sub Send() Dim allegato As New System.Web.Mail.MailAttachment(pathAllegato) Mail.Fields(SMTP_SERVER) = ServerSmtp Mail.Fields(SMTP_SERVER_PORT) = 465 Mail.Fields(SEND_USING) = 2 Mail.Fields(SMTP_USE_SSL) = True Mail.Fields(SMTP_AUTHENTICATE) = 1 Mail.Fields(SEND_USERNAME) = username Mail.Fields(SEND_PASSWORD) = password Mail.From = Sender Mail.To = Receiver Mail.Subject = Subject If isHtml Then Mail.BodyFormat = Web.Mail.MailFormat.Html Else Mail.BodyFormat = Web.Mail.MailFormat.Text End If Mail.Body = Body Mail.Attachments.Add(allegato) System.Web.Mail.SmtpMail.Send(Mail) End Sub