2012-06-29 1 views
3

je suis en train d'envoyer des messages de cette façon:Comment corriger Protocole incorrect: envoi de courrier en utilisant null javax.mail

Properties props = new Properties(); 
props.setProperty("mail.transport.protocol", "smtp"); 
props.setProperty("mail.host", "out.alice.it"); 
props.setProperty("mail.user", "[email protected]"); 
props.setProperty("mail.password", "*****"); 
Session mailSession = Session.getDefaultInstance(props, null); 
Transport transport = mailSession.getTransport(); 
MimeMessage message = new MimeMessage(mailSession); 
message.setFrom(new InternetAddress("Host", "Name")); 

Sur la ligne Transport transport... i récupérer cette erreur:

javax.mail.NoSuchProviderException: Invalid protocol: null 
    at javax.mail.Session.getProvider(Session.java:440) 
    at javax.mail.Session.getTransport(Session.java:659) 
    at javax.mail.Session.getTransport(Session.java:640) 
    at javax.mail.Session.getTransport(Session.java:626) 
    at Mail.sendMail(Mail.java:151) 

Comment puis-je résoudre? Est-ce que quelqu'un peut m'aider? Merci!! :)

EDIT:

Si je crée un principal et le lancement de cette méthode pour envoyer du courrier, il fonctionne bien! Mon problème Borns après avoir lu le courrier dans le dossier mail:

Properties properties = System.getProperties(); 
properties.setProperty("mail.store.protocol", "imap"); 
Session session = Session.getDefaultInstance(properties, null); 
Store store = session.getStore("pop3"); 
store.connect("pop3.domain.it", "[email protected]", "****"); 
Folder inbox = store.getFolder("inbox"); 
FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false); 
inbox.open(Folder.READ_ONLY); 
Message messages[] = inbox.search(ft); 
for(Message message:messages) { 
    if(message.getFrom()[0].toString().equals("aMail")){ 
     sendMail(message.getFrom()[0].toString());//Error! 
    } 
} 

Je pensais que l'exception borns parce que je suis magasin ouvert pour obtenir le courrier de la boîte de réception, donc je modifier ainsi:

ArrayList<String> reply = new ArrayList<String(); 
for(Message message:messages) { 
    if(message.getFrom()[0].toString().equals("aMail")){ 
     reply.add(message.getFrom()[0].toString()); 
    } 
} 
store.close(); 
for(String mail : reply){ 
    sendMail(mail); // ERROR AGAIN! 
} 

très étrange ....

SOLVED ainsi:

i modifié cette ligne

Session mailSession = Session.getDefaultInstance(props, null); 

à

Session mailSession = Session.getInstance(props); 
+0

Ouais, il n'y a qu'une seule instance 'Session' par défaut. Si vous essayez d'obtenir celui par défaut après qu'il a été récupéré avec un authentificateur différent, il échouera avec l'erreur que vous avez vu. – dkarp

+0

Pour moi la solution ici a fonctionné http://stackoverflow.com/questions/17590762/javax-mail-nosuchproviderexception-invalid-protocol-null – Madhu

Répondre

2

vous pouvez essayer une autre façon:

Properties props = new Properties(); 
props.setProperty("mail.transport.protocol", "smtp"); 
props.setProperty("mail.smtp.host", "out.alice.it"); 
props.setProperty("mail.smtp.auth", "true"); 
final PasswordAuthentication auth = new PasswordAuthentication(smtpUser, stmpPassword); 
Session mailSession = Session.getDefaultInstance(props, new Authenticator() { 
    @Override 
    protected PasswordAuthentication getPasswordAuthentication() { return auth; } 
}); 
MimeMessage message = ....; 
// compose the message 
Transport.send(message); 
+0

il me procurer cette exception: java.lang.SecurityException: Accès à la session par défaut refusé – JackTurky

+0

voir edit pls .. :) – JackTurky

+0

Je ne sais pas pourquoi mais quand j'envoie un e-mail via une classe principale ce n'est pas un problème mais quand j'envoie du courrier via l'application jsf il faut mettre le protocole smtp. – gesus

1

Je recevais cette même erreur, et mon problème était que j'oublié d'inclure:

props.put("mail.transport.protocol", "smtp"); 
Questions connexes