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

JAVA – Inviare Email in formato HTML con l’aggiunta di Immagini e Connessione SSL (Codice)

Oggi voglio mettervi ha disposizione una funzione che vi permette di inviare una Email in Java nel formato HTML aggiungendo le immagini nell’email.

Esempio volete inviare una email con la fine i vostri dati e il vostro logo della società o quello che volete. Ora usando la funzione che vi metto a disposizione lo potete fare.

Ho deciso di inviare l’email utilizzando Google ma lo potete modificare come volete a vostro piacimento.

Ecco cosa potete ottenere in Java con un progetto di Esempio :

(ATTENZIONE!!! Prima di procedere dovete scaricare le ultime Jar di JavaMail dal seguente sito internet dell’Oracle : http://www.oracle.com/technetwork/java/index-138643.html)

import java.io.IOException;

import java.util.Properties;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

public class SendEmailHtmlWithImg {

static String hostname = "smtp.gmail.com";

//Email id from which you want to send mail

static String username = "[email protected]";

//Password for that id

static String password = "[email protected]";

public static void main(String[] args) {

Properties props = new Properties();

//smtp.gmail.com is server of Gmail replace it if you want some other server

props.put("mail.smtp.host", hostname);

//465 is SSL port no for Gmail

props.put("mail.smtp.socketFactory.port", "465");

props.put("mail.smtp.socketFactory.class",

"javax.net.ssl.SSLSocketFactory");

props.put("mail.smtp.auth", "true");

//465 is SSL port no for Gmail

props.put("mail.smtp.port", "465");

Session session = Session.getDefaultInstance(props,

new javax.mail.Authenticator() {

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(username,password);

}

});

try {

MimeMultipart content = new MimeMultipart("related");

Message message = new MimeMessage(session);

message.setFrom(new InternetAddress("[email protected]"));

message.setRecipients(Message.RecipientType.TO,

InternetAddress.parse("[email protected]"));

message.setSubject("Mail Subject");

message.setText("mail message");

String cid = getContentId();

MimeBodyPart textPart = new MimeBodyPart();

textPart.setText("<html><head>"

+ "<title>Esempio di Testo HTML Mail</title>"

+ "</head>\n"

+ "<body><div><b>Ciao</b></div>"

+ "<div>Invio del testo HTML con l'aggiunta di una immagine <i>Forte Vero!</i> </div>\n"

+ "<div>Qui sotto troverete una immagine:<br> <img src=\"cid:"

+ cid

+ "\" /></div>\n" + "<div><br>Qui sotto il testo dopo l'immagine!</div></body></html>",

"US-ASCII", "html");

content.addBodyPart(textPart);

// Image part

MimeBodyPart imagePart = new MimeBodyPart();

try {

imagePart.attachFile("img/PrivacyFix.jpg");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

imagePart.setContentID("<" + cid + ">");

imagePart.setDisposition(MimeBodyPart.INLINE);

content.addBodyPart(imagePart);

message.setContent(content);

Transport.send(message);

System.out.println("Fine/Done");

} catch (MessagingException e) {

throw new RuntimeException(e);

}

}

static int seq = 0;

/**

* Sequence goes from 0 to 100K, then starts up at 0 again. This is large enough,

* and saves

* @return

*/

public static synchronized int getSeq() {

return (seq++) % 100000;

}

/**

* One possible way to generate very-likely-unique content IDs.

* @return A content id that uses the hostname, the current time, and a sequence number

* to avoid collision.

*/

public static String getContentId() {

int c = getSeq();

return c + "." + System.currentTimeMillis() + "@" + hostname;

}

}

Potete scaricare il file d’esempio :

Password : “ImaginSystems”

Link File Download : 

Attenzione!!! Se ci sono problemi nell’eseguire il file, prima controllate se avete importato bene le librerie che ho allegato dentro al file nella cartella “lib”

Questo sito o gli strumenti terzi da questo utilizzati si avvalgono di cookie necessari al funzionamento ed utili alle finalità illustrate nella cookie policy. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie. Più Informazioni | Close