L'angolo del N00b

Appunti di programmazione per principianti e non
 
IndiceIndice  CalendarioCalendario  FAQFAQ  CercaCerca  Lista UtentiLista Utenti  GruppiGruppi  RegistratiRegistrati  AccediAccedi  

Condividere | 
 

 Apache Commons - Package di gestione invio e-mail

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso 
AutoreMessaggio
Jambalaya
Admin
avatar

Maschile
Numero di messaggi : 33
Età : 36
Località : Bios
Data d'iscrizione : 21.02.09

MessaggioTitolo: Apache Commons - Package di gestione invio e-mail   Gio Mag 14, 2009 4:13 pm

Nel codice di esempio i settaggi sono stati messi tutti in una singola clsse "Mail Settings" in modo da rendere più semplice la comparazione del codice.

Codice:


public class MailSettings {
   // settare smtpHost con l'hostname del proprio server
   public static String smtpHost="mail.example.com";   
   // per l'autenticazione SMTP si settino le due seguenti linee con user e psw
   public static String smtpUsername="username";
   public static String smtpPassword="password";   
   // settare toAddress con l'indirizzo del destinatario
   public static String toAddress="destinatario@example.com";
   //settare un array con un "x" di altri destinatari in CopiaCarbone   
   public static String[] ccAddresses=new String[] { "someone@example.com", "other@example.com" };
   //settaggio del mittente   
   public static String fromAddress="io@example.com";
   public static String fromName="Mail Example App";   
   //settaggio dell'oggetto della mail
   public static String messageSubject="Oggetto della mail";   
   //Corpo della mail
   public static String messageBody1="Riempimento del corpo della mail di esempio";   
   //è possibile allegare dei file
   public static String inlineImage="file:immagineAllegato.gif";   
}


Vediamo ora come si inviano le e-mail utilizando il package Apache Commons E-mail (MailCommons.java). Questo package ha una serie di classi basate sul tipo di e-mail che si vuole inviare. La piu' semplice è la SimpleEmail. Non è necessario settare sessioni e proprietà:

Codice:

SimpleEmail email=new SimpleEmail();
email.setHostName(MailSettings.smtpHost);

Ciò crea la nostra e-mail e le indica che deve effettuar el'invio attraverso il nostro server SMTP. Dal momento che Commons invia solo e-mail intenet non è necessario creare instanze di InternetAddress. Basta settare l'indirizzo di invio:

Codice:

email.setFrom(MailSettings.fromAddress,MailSettings.fromName);

Invece di inserire tipi di destinatario, possiamo semplicemente aggiungere un elenco alla lista:

Codice:

email.addTo(MailSettings.toAddress);

Anche settare l'oggetto e il testo del messagio è un operazione semplice.

Codice:

email.setSubject(MailSettings.messageSubject);
email.setMsg(MailSettings.messageBody1);
email.send();

L'unica eccezione possibile risulta essere EmailException. Cosi è facile da notare che sia piu leggibile, avendo nascosto anche il framework e la gestione delle sessioni.

Vediamo come Commons E-mail gestisce l'autenticazione.

Codice:

email.setAuthentication(MailSettings.smtpUsername,MailSettings.smtpPassword);

che elimina tutti i problemi dal processo.

Esiste un altro tipo di autenticazione , POP-before-SMTP che è utilizzata dai servizi e-mail che non implementano la SMTP AUTH, in quanto SMTP AUTH è stata un estenzione seguente delle SMTP. POP-before-SMTP funziona permettendo ai clients di mandare e-mail dopo che il client ha eseguito l'accesso ad un server di POP mail protetto da psw per, il periodo di attività è a tempo limitato partendo dall'acesso al POP.

Codice:

email.setPopBeforeSMTP(true,popHost,popUsername,popPassword);

Questo abilita tutte le meccaniche per utilizzare il POP-before-SMTP seza nemmeno dover scrivere il POP """plumbing""".

Si possono ora vedere due cose, per prima cosa i metodi setTo, setCc e setBcc accettano tutti e tre Collections di InternetAddress. Esistono i metodi addTo, addCc e addBcc che rendono semplice la creazione di liste di destinatari:

Codice:

for(String s:MailSettings.ccAddresses) email.addCc(s);

che risulta molto piu chiaro del corrispettivo JavaMail.
Infine vediamo come inviare e-mail contenenti codifica html e immagini allegate.

Codice:

HtmlEmail email=new HtmlEmail();...
String cid=email.embed(new URL(MailSettings.inlineImage),"Builder AU Logo");
email.setHtmlMsg("<H1>Hi! From MailJavaMail</H1><img src=\"cid:"+cid+"\">");
email.setTextMsg("Il suo cliet di mail non supporta i messaggi HTML");

Questo codice è più corto di quello utilizzato con JavaMail, e questa versione ha più funzionalità in quanto setta anche il testo alternativo da mostratre quando il client di posta non puo' gestire l'HTML. Siamo passati dal creare una SimpleEmail ad una HTMLEmail. Per inserire un immagine chiamiamo semplicemente il metodo di HtmlEmail. Questo restituisce una stringa che sarà un content-id gestito per l'imagine e che possimao usare quando generiamo il contenuto HTML. Per farlo chiamiamo semplicemente setHtmlMsg conla nostra stringa propriamente costruita. setTextMsg setta il contenuto non HTML.
Common è più user friendli, elaborando diverse problematiche da se, ma concede minore personalizzazione.


Esempio riassuntivo di classe Common:

Codice:

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
public class MailCommons3 {
   public static void main(String[] args) {   
      try {
         SimpleEmail email=new SimpleEmail();         
         email.setHostName(MailSettings.smtpHost);
         email.setAuthentication(MailSettings.smtpUsername,MailSettings.smtpPassword);
         email.setFrom(MailSettings.fromAddress,MailSettings.fromName);
         email.addTo(MailSettings.toAddress);         
         for(String s:MailSettings.ccAddresses) email.addCc(s);            
         email.setSubject(MailSettings.messageSubject);
         email.setMsg(MailSettings.messageBody1);
         email.send();
      } catch (EmailException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
}

ed esempio di calsse HtmlCommon

Codice:

import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
public class HtmlMailCommons {
   public static void main(String[] args) {   
      try {
         HtmlEmail email=new HtmlEmail();
         email.setHostName(MailSettings.smtpHost);
         email.setAuthentication(MailSettings.smtpUsername,MailSettings.smtpPassword);
         email.setFrom(MailSettings.fromAddress,MailSettings.fromName);
         email.addTo(MailSettings.toAddress);
         email.setSubject(MailSettings.messageSubject);
         String cid=email.embed(new URL(MailSettings.inlineImage),"UK Builder Logo");
         email.setHtmlMsg("<H1>Hi! From HtmlMailCommons</H1><img src=\"cid:"+cid+"\">");
         email.setTextMsg("Your email client does not support HTML messages, sorry");
         email.send();
      } catch (EmailException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } catch (MalformedURLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
}

_________________



Tornare in alto Andare in basso
Vedi il profilo dell'utente http://jteam.forumattivo.info
 
Apache Commons - Package di gestione invio e-mail
Vedere l'argomento precedente Vedere l'argomento seguente Tornare in alto 
Pagina 1 di 1
 Argomenti simili
-
» Come eliminare tutte le e-mail in pochissimi click da Hotmail
» Come inserire l'apice e/o il pedice su Word 2007
» Codice HTML tasto cerca con immagine al posto dell'invio - Forum attivo
» Impostare automaticamente lo stato "assente" su Skype
» [Video] Come installare OpenOffice nella chiavetta USB

Permessi di questa sezione del forum:Non puoi rispondere agli argomenti in questo forum
L'angolo del N00b :: Java netBook :: Soluzioni-
Andare verso: