Invio di mail certificate (PEC) tramite java mail

Invio di mail certificate (PEC) tramite java mail

La Posta Elettronica Certificata (PEC) è il sistema che consente di inviare e-mail
con valore legale equiparato ad una raccomandata con ricevuta di ritorno, come stabilito dalla vigente normativa.

L’invio della mail avviente tramaite un gestore di posta pec, ovvero un qualsiasi provider
che offra un servizio di invio di posta PEC.

A questo punto, una volta definito un account presso il gestore PEC, possiamo
configurare la nostra applicazione per inviare delle mail certificate.

Per effettuare l’invio di una mail, tramite una procedura java, è necessario soltanto
l’utilizzo della libreria javamail(ad esempio la javamail-1.4.5 o versioni più recenti)
http://www.oracle.com/technetwork/java/javamail/index-138643.html

Il collegamento/comunizazione con il server per l’invio della posta (tramite protocollo SMTP)
dovrà avvenire anche tramite un protocollo di sicurezza SSL.

Per far questo specificheremo che il protocollo per l’invio della mail debba essere il protocollo
SMTPS

String protocollo = "smtps";

Necessario è anche il settaggio di 2 proprietà di sicurezza :

java.security.Security.setProperty("ssl.SocketFactory.provider", "mio.package.SSLSocketFactoryImpl");
java.security.Security.setProperty("ssl.ServerSocketFactory.provider", "mio.package.SSLServerSocketFactoryImpl");

In cui le due classi SSLSocketFactoryImpl e SSLServerSocketFactoryImpl implementeranno
le javax.net.ssl.SSLSocketFactory e javax.net.ssl.SSLServerSocketFactory e possono
essere due classi appartenenti a librerie proprietarie dell’ ambiente in cui verrà installata la vostra
applicazione.

a questo punto occorre settare la sessione mail e il flag per l’autenticazione

Properties props = new Properties();

props.put("mail.transport.protocol", "smtps");
props.put("mail.smtps.host", "HOST_SERVER_SMTP_DEL_GESTORE_PEC"); // esempio smtp.gmail.com
props.put("mail.smtps.auth", "true");

Session session = Session.getInstance(props,new javax.mail.Authenticator()
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication( "username_vostro_account_pec" ,"password_vostro_account_pec");
}
});

Come si vede dall’esempio di sopra, per la creazione della sessione mail abbiamo usato
una classe PasswordAuthentication che ci permette di effettuare l’autenticazione tramite
user account e password con il server di posta .
Ciò perchè si deve stabilire una sessione in sicurezza tramite protocollo SSL/TLS.

Create quindi il vostro messaggio mail

MimeMessage messaggioEmail = new MimeMessage( session );

e impostate le varie parti del vostro messaggio (subject, body, attachment,sentDate, From, To etc…)

Una volta completato il vostro messaggio provvederemo a trasferirlo tramite il corretto protocollo di
trasporto:

messaggioEmail.saveChanges();
com.sun.mail.smtp.SMTPMessage mex = new SMTPMessage(messaggioEmail);
com.sun.mail.smtp.SMTPSSLTransport t =(com.sun.mail.smtp.SMTPSSLTransport)session.getTransport(protocollo); // <--SMTPS
t.setStartTLS(true); //<-- impostiamo il flag per iniziare la comunicazione sicura
t.connect( "HOST_SERVER_SMTP_DEL_GESTORE_PEC", "username_vostro_account_pec" ,"password_vostro_account_pec");

t.sendMessage( mex, mex.getAllRecipients());
t.close();

Una importante considerazione deve essere fatta per il mittente della mail; questo
deve essere lo stesso indirizzo a cui è associtato il vostro account presso il
gestore PEC (ovvero “username_vostro_account_pec”).

Se il vostro account è associato , ad esempio, all’indirizzo : mio.indirizzo@smtps.gestore.pec
allora il mittente del messaggio (messaggioEmail.setFrom(….) ) deve essere proprio mio.indirizzo@smtps.gestore.pec

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *