Visualizzazione dei risultati da 1 a 9 su 9

Visualizzazione discussione

  1. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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

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.