PDA

Visualizza la versione completa : [JAVA] Invio email tramite javax.mail.*


alextg82
22-12-2004, 11:11
Salve a tutti,
sto cercando di realizzare un semplice applicativo per l'invio di email e utilizzo le API di javax.mail.* e javax.internet.*.
Posto il codice


try {
Properties props = new Properties();
props.put( "mail.smtp.host", "smtp.email.it" );

Session session = Session.getDefaultInstance(props, null);
Message message = new MimeMessage(session);

InternetAddress from = new InternetAddress( mittente );
InternetAddress to[] = InternetAddress.parse( destinatario );

message.setFrom( from );
message.setRecipients( Message.RecipientType.TO, to );
message.setText(testoMessaggio);

Transport.send(message);
}
catch(MessagingException e)
{
e.printStackTrace();
System.out.println("Non stato possibile inviare il suo messaggio");
}
System.out.println("Il messaggio stato spedito correttamente");
}


ma mi da il seguente errori in runtime

javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
class com.sun.mail.smtp.SMTPAddressFailedException: 553 <_indirizzomittente_>: Sender address rejected: not logged in as owner

at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTranspo rt.java:1130)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTr ansport.java:525)
at javax.mail.Transport.send0(Transport.java:151)
at javax.mail.Transport.send(Transport.java:80)
at Principale.main(Principale.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.intellij.rt.execution.application.AppMain.main (AppMain.java:78)

Io penso sia un errore di mancata autenticazione, se cos come posso far autenticare l'utente???
Grazie

Angelo1974
22-12-2004, 14:10
Ciao....prova con questo codice.... io non l'ho usato ancora ma potrebbe andare:



import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;


public class MyAuthenticator extends Authenticator{

private PasswordAuthentication passwordAutentication = new PasswordAuthentication("nome.cognome@email.it", "password");

public MyAuthenticator(){

}

public PasswordAuthentication getPasswordAuthentication() {
return passwordAutentication;
}
}




import java.io.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.util.MessageResources;

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.io.*;


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();
}
}
}

alextg82
22-12-2004, 15:33
Ciao, grazie mille, ho risolto col tuo aiuto.

newtel
17-03-2005, 17:02
...ho letto il post sono arrivato quasi a vedere l' arcobaleno...
...ho un piccolo problemino...
...devo ricevere conferma per la ricezione della mail che invio...
...l' utente xxxx ha letto...
...quale metodo posso usare????
...grazie mille!!!

Loading