Tutto ciò che ti serve è la libreria JavaMail, poi basta usarla.
Qui un esempio di classe per l'invio di PEC (l'ho anche commentata per JavaDoc):
codice:import java.io.File; import java.io.FileInputStream; import java.util.*; import javax.mail.*; import javax.mail.internet.*; /** * Questa classe permette di effettuare l'invio di mail tramite PEC * (Posta Elettronica Certificata) * * La classe si occupa di gestire l'intera comunicazione con il server * SMTP tramite SSL usando la libreria standard JavaMail. * * La classe è in grado di spedire mail con allegati. * * @author LeleFT */ public class MailerPecUtility { /* * UserAuthenticator: fornise un'implementazione concreta * di Authenticator; permette, quindi, di fornire all'applicazione * (in chiaro) l'utente e la password per l'accesso al server SMTP */ private class UserAuthenticator extends Authenticator { private String user; private String pass; public UserAuthenticator(String user, String pass) { this.user = user; this.pass = pass; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user, pass); } } /* * Allegato: rappresenta un singolo file da allegare alla mail. * Il singolo allegato è rappresentato da un file fisico * e da un nome da visualizzare all'interno della mail. */ private class Allegato { private String nomeAllegato; private File fileAllegato; public Allegato(String nomeAllegato, File fileAllegato) { this.nomeAllegato = nomeAllegato; this.fileAllegato = fileAllegato; } public String getNomeAllegato() { return nomeAllegato; } public File getFileAllegato() { return fileAllegato; } } private String cfgFile; // Percorso al file properties di configurazione private String subject; // L'oggetto della mail private String txtMessage; // Il corpo della mail (plain text) private ArrayList<String> toAddress; // Elenco dei destinatari (TO) private ArrayList<String> ccAddress; // Elenco dei destinatari in copia (CC) private ArrayList<Allegato> attachments; // Elenco degli allegati private UserAuthenticator userAuthenticator; // Autenticatore per SMTP public MailerPecUtility(String cfgFile) { this.cfgFile = cfgFile; subject = ""; txtMessage = ""; toAddress = new ArrayList<String>(); ccAddress = new ArrayList<String>(); attachments = new ArrayList<Allegato>(); } /** * Imposta l'oggetto della mail * * @param subject l'oggetto della mail */ public void setSubject(String subject) { this.subject = subject; } /** * Aggiunge un destinatario all'elenco dei destinatari di questa mail * * @param recipient l'indirizzo email del destinatario da aggiungere */ public void addRecipient(String recipient) { toAddress.add( recipient ); } /** * Aggiunge un destinatario in copia all'elenco dei destinatari in copia * * @param ccRec l'indirizzo email del destinatario in copia da aggiungere */ public void addCopyRecipient(String ccRec) { ccAddress.add( ccRec ); } /** * Aggiunge un allegato alla mail * * @param f un oggetto File che rappresenta il file da allegare * @param newName il nome dell'allegato da visualizzare nella mail */ public void addAttachment(File f, String newName) { attachments.add( new Allegato(newName, f) ); } /** * Imposta il contenuto testuale della mail (corpo del messaggio) * * @param txtMsg array di stringhe: ciascun elemento rappresenta una * riga del corpo messaggio */ public void setTextMessage(String[] txtMsg) { StringBuilder messaggio = new StringBuilder(); for(String str : txtMsg) messaggio.append(str + "\n"); this.txtMessage = messaggio.toString(); } /** * Effettua l'invio della mail */ public void sendMail() { try { // Ottengo le proprietà di sistema Properties props = System.getProperties (); // Proprietà specifiche lette dal file Properties specProps = new Properties(); // Carico il file con le proprietà specifiche specProps.load( new FileInputStream(cfgFile) ); // Aggiungo alle proprietà specifiche, tutte le proprietà generali di sistema Set<String> keys = props.stringPropertyNames(); for(String key : keys) specProps.put(key, props.getProperty(key)); // Ottengo le informazioni per l'autenticazione e l'invio della mail String user = specProps.getProperty("nomeutente"); String pass = specProps.getProperty("password"); String fromAddress = specProps.getProperty("from-address"); String personalName = specProps.getProperty("from-name"); // Rimuovo le proprietà appena lette dalle proprietà specifiche specProps.remove("nomeutente"); specProps.remove("password"); specProps.remove("from-address"); specProps.remove("from-name"); // La porta da usare per la connessione al server SMTP int port = Integer.parseInt(specProps.getProperty("mail.smtp.port") ); // Costruisco l'oggetto authenticator per effettuare l'autenticazione al server SMTP userAuthenticator = new UserAuthenticator(user, pass); // Ottengo una sessione SMTP Session session = Session.getDefaultInstance(specProps, userAuthenticator); // Costruisco l'oggeto mail MimeMessage message = new MimeMessage( session ); // Imposto il mittente InternetAddress iaFrom = new InternetAddress(fromAddress, personalName); message.setFrom( iaFrom ); // Aggiungo i destinatari principali for(String rec : toAddress) { message.addRecipient(Message.RecipientType.TO, new InternetAddress(rec)); } // Aggiungo i destinatari in copia for(String rec : ccAddress) { message.addRecipient(Message.RecipientType.CC, new InternetAddress(rec)); } // Setto l'oggetto della mail message.setSubject( subject ); // Creo il corpo del messaggio (il testo + gli allegati) componiMessaggio( message ); // Salvo lo stato dell'oggetto mail message.saveChanges(); // Dalla sessione SMTP ottengo il Transport che si occuperà di dialogare col server Transport t = session.getTransport("smtps"); // Effettuo la connessione t.connect(specProps.getProperty("mail.smtp.host"), port, user, pass); // Invio il messaggio t.sendMessage(message, message.getAllRecipients()); // Chiudo la connessione t.close(); } catch (AddressException ae) { System.out.println("Indirizzo che ha generato l'eccezione: " + ae.getRef()); System.out.println("Posizione occorrenza errore: " + ae.getPos()); System.out.println("Oggetto del messaggio: " + subject); System.out.println("StackTrace dell'eccezione:"); ae.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /* * Si occupa di comporre il messaggio: costruisce il corpo del messaggio * (testo) e aggiunge tutti gli eventuali allegati */ private void componiMessaggio(MimeMessage message) throws Exception { Multipart multipart = new MimeMultipart(); // Creo il corpo del messaggio con il testo BodyPart bodyPart = new MimeBodyPart(); ((MimeBodyPart) bodyPart).setText(txtMessage, "ISO-8859-15"); multipart.addBodyPart( bodyPart ); // Se ci sono allegati, li allego for(Allegato al : attachments) { bodyPart = new MimeBodyPart(); ((MimeBodyPart) bodyPart).attachFile( al.getFileAllegato() ); bodyPart.setFileName( al.getNomeAllegato() ); multipart.addBodyPart( bodyPart ); } // Aggiungo il Multipart al messaggio message.setContent( multipart ); } }
Un esempio del file di configurazione da passargli (i valori, ovviamente, dovrai metterli tu):
config/cfgpec.cfg
codice:mail.smtp.host=server_smtp_della_pec mail.smtp.socketFactory.port=465 mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory mail.smtp.auth=true mail.smtp.port=465 mail.mime.charset=ISO-8859-15 nomeutente=nome_utente_da_usare_per_autenticazione password=password_da_usare_per_autenticazione from-address=indirizzo_email_del_mittente from-name=nome_da_visualizzare_nel_campo_del_mittente
E qui un esempio di utilizzo della classe:
codice:// Creo l'oggetto per l'invio della mail MailerPecUtility mailer = new MailerPecUtility("config/cfgpec.cfg"); // Imposto l'oggetto della mail mailer.setSubject("Oggetto della mail"); // Aggiungo un destinatario (TO) mailer.addRecipient("topolino@topolinia.it"); // Aggiungo un destinatario in copia (CC) mailer.addCopyRecipient("paperino@paperopoli.it"); // Aggiungo anche un allegato mailer.addAttachment(new File("allegato.pdf"), "NomeAllegato.pdf"); // Invio la mail mailer.sendMail();
Ciao.![]()



Rispondi quotando