Imaginsystems


Tecniche di Programmazione - Codici Sorgenti - News Informatiche
Archivio Posts
Anno 2014

Anno 2013

Anno 2012
Statistiche
  • Views Home Page: 71.612
  • Views Posts: 542.417
  • Views Gallerie: 0
  • n° Posts: 210
  • n° Commenti: 224

C# - Inviare Email SMTP con autenticazione SSL in formato HTML con l'aggiunta di File (Codice)

C# - Inviare Email SMTP con autenticazione SSL in formato HTML con l'aggiunta di File (Codice)


  

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 hai 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):

CODICE VISUAL STUDIO 2010 - C#

      using System.Web;

Ora scriviamo la seguente funzione :

CODICE VISUAL STUDIO 2010 - C#

InvioPro("from@libero.it","to@libero.it","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", "username@libero.it");

            mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "password@libero.it"); 

            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(...);

CODICE VISUAL STUDIO 2010 - C#

         // 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.

CODICE VISUAL STUDIO 2010 - C#

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

By ImaginSystems & Queen Gin   

Categoria: C#
mercoledì, 10 set 2014 Ore. 08.32

Messaggi collegati


Ora e Data
Mappa
Blogs Amici
    Copyright © 2002-2007 - Blogs 2.0
    dotNetHell.it | Home Page Blogs
    ASP.NET 2.0 Windows 2003