Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Modulo java per la PEC (Posta Elettronica Certificata)

    Salve, sono alla ricerca di librerie java che mi permettano di fare operazioni con la PEC.
    Ho controllato le api mail di java (http://www.oracle.com/technetwork/ja...ail/index.html), ma non mi sembra di aver trovato qualcosa di utile.
    sul web poi ho beccato questo:
    http://code.google.com/p/jopenpec/

    ma non sono riuscito ad farlo funzionare (anche avendo scaricato il programma tramite subversion...qualcuno si?)
    qualche consiglio?
    grazie
    IDE: NetBeans 7.1
    Java:1.7.0_2
    Framework: JSF 2.0/2.1 - Mojarra 2.1.3
    Primefaces 3.2
    GlassFish 3.1.2

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    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.
    Ultima modifica di LeleFT; 29-08-2014 a 13:57
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ti ringrazio tantissimo
    Esagero se ti chiedo anche la classe per la ricezione di PEC?
    grazie comunque.
    IDE: NetBeans 7.1
    Java:1.7.0_2
    Framework: JSF 2.0/2.1 - Mojarra 2.1.3
    Primefaces 3.2
    GlassFish 3.1.2

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Originariamente inviato da supertarmax
    Ti ringrazio tantissimo
    Esagero se ti chiedo anche la classe per la ricezione di PEC?
    Direi di sì... stai chiedendo un intero client di posta elettronica.
    Un conto è avere una semplice classe per fare l'invio di una mail, un conto un intero programma che gestisce la posta... non si limita certo ad una classe.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    ti ringrazio comunque.
    IDE: NetBeans 7.1
    Java:1.7.0_2
    Framework: JSF 2.0/2.1 - Mojarra 2.1.3
    Primefaces 3.2
    GlassFish 3.1.2

  6. #6
    Perdonate l'intromissione, ma io sono 2 giorni che provo ad inviare una mail con una casella pec di aruba; inizialmente ho provato a modificare le impostazioni della classe che usavo per l'invio della mail classica, ma senza successo ottenendo sempre un errore.
    Poi ho trovato questa discussione ed ho usato la classe postata ed ottendo sempre il medesimo errore, ovvero,
    javax.mail.MessagingException: Could not connect to SMTP host: smtps.aruba.pec.it, port: 465;
    il file di configurazione contiene:

    codice:
    mail.smtp.host=smtps.aruba.pec.it
    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=miauser
    password=miapassword
    from-address=mio indirizzo
    from-name=mio nome
    Dove sbaglio?

    Grazie per l'attenzione.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    A me risulta che il server di posta PEC di aruba sia questo:

    smtps.pec.aruba.it

    Controlla, perchè nel tuo file di impostazioni è scritto sbagliato.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Grazie Lele,
    come al solito le disattenzioni fanno perdere un sacco di tempo!!!

  9. #9
    Ancora qualche informazione:
    1) c'è un sistema per fare in modo che le mail così inviate siano poi visibili nella cartella posta inviata della webmail?
    2) nel file di configurazione, cosa metto in luogo di mail.smtp.socketFactory.class=javax.net.ssl.SSLSoc ketFactory per inviare posta non SSL tramite la porta 25?
    3) per caso c'è bisogno di un intervallo di tempo tra l'invio di 2 mail successive?
    Grazie ancora.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.