Sono finalmente riuscita a risolvere il mio problema.
Leggendo tra le pagine di email.it ho scoperto che è necessaria l'autenticazione per inviare delle e-mail.
Al codice che mi ha gentilmente e pazientemente postato Angelo1974 ho dovuto aggiungere alcune righe che servono appunto per l'autenticazione e modificarne altre (nel codice le trovate evidenziate tra *******).
Inoltre ho dovuto aggiungere una classe necessaria all'autenticazione.
Se la struttura della mia classe vi sembra strana è perchè sto usando JSP e le Action del framework struts.
Il codice di un'applicazione normale non è molto diverso.
Questa invece è la classe per l'autenticazione.codice:/* * EmailAction.java * * Created on 20 aprile 2004, 14.42 */ package com.kibuz.products.Actions; import java.io.*; import javax.servlet.http.*; import org.apache.struts.action.*; import org.apache.struts.util.MessageResources; import com.kibuz.products.objects.MyAuthenticator; import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; import java.io.*; /** * * Title: SendEMail</p> * Description: Classe utilizzata per inviare una e-mail</p> * Copyright: Copyright (c) 2003</p> * Company: </p> * @author: * @version 1.0 */ public class EmailAction extends Action{ /** * Oggetto properties tramite cui settare la sessione */ private Properties pro; /** * Oggetto sessione */ private Session sessione; /** * Oggetto messaggio */ private Message messaggio; /** * Indirizzo e-mail mittente */ private InternetAddress da; /** * Indirizzi e-mail destinatari */ private InternetAddress[] a; public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String smtp = "smtp.email.it"; this.setProperties(smtp); sendMessaggio("nome.cognome@email.it", "nome.cognome@email.it", "Oggetto", "testo messaggio", false); return new ActionForward("home.kibuz", true); } /** * Costruttore della classe che setta, nelle properties, l'smtp utilizzato * * La spedizione di mail con l'smtp di email.it richiede l'autenticazione quindi è necessario inserire la riga pro.put("mail.smtp.auth", "true"); * * @param po -l'smtp utilizzato per inviare il messaggio */ public void setProperties(String po){ pro = System.getProperties(); pro.put("mail.smtp.host", po); //********************************************************************************************** pro.put("mail.smtp.auth", "true"); //********************************************************************************************** } /** * Metodo che si occupa di settare la sessione */ private void setSessione(){ //********************************************************************************************** javax.mail.Authenticator auth = new MyAuthenticator(); // this class return a new PasswordAuthentication(usr, pwd) object sessione = javax.mail.Session.getInstance(pro, auth); //********************************************************************************************** sessione.setDebug(true); } /** * Metodo che si occupa di settare, inizializzare il messaggio e di inviarlo * @param daChi -mittente * @param aChi -destinatari * @param oggetto -oggetto e-mail * @param testoMessaggio -testo dell'email * @param autoritation -true se bisogna autorizzarsi, false altrimenti * @throws AddressException eccezione che si può verificare se l'indirizzo e-mail * dovesse essere non corretto * @throws MessagingException eventuale altra eccezione */ public void sendMessaggio( String daChi, String aChi, String oggetto, String testoMessaggio, boolean autoritation ){ try{ setSessione(); String host = pro.getProperty("mail.smtp.host"); System.out.println( "["+host+"]" ); Transport t = sessione.getTransport( "smtp" ); messaggio = new MimeMessage(sessione); da = new InternetAddress(daChi); a = InternetAddress.parse(aChi); messaggio.setFrom(da); messaggio.setRecipients(Message.RecipientType.TO, a); messaggio.setSubject(oggetto); messaggio.setSentDate(new Date()); messaggio.setText(testoMessaggio); //messaggio.setDataHandler(this.allegato); // il controllo sull'autoritation non è necessario. // il metodo send chiama anche il metodo connect /* if( autoritation ){ String log = "caterina.curti"; String psw = "kiuhyewpo"; t.connect( host, log, psw ); }else{ t.connect(); } */ t.send( messaggio ); t.close(); }catch( AddressException ae ){ ae.printStackTrace(); }catch( MessagingException me ){ me.printStackTrace(); } } }
Non fa molto se non avere una variabile d'istanza che contiene lo username del mittente e la password e fornire un metodo che restituisce la PasswordAuthentication;
Spero che possa servire a qualcuno.codice:/* * MyAuthenticator.java * * Created on 21 aprile 2004, 11.59 */ package com.kibuz.products.objects; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; /** * * @author Caterina */ public class MyAuthenticator extends Authenticator{ private PasswordAuthentication passwordAutentication = new PasswordAuthentication("nome.cognome@email.it", "password"); public MyAuthenticator(){ } public PasswordAuthentication getPasswordAuthentication() { return passwordAutentication; } }

..
Rispondi quotando