Comment corriger Protocole incorrect: null envoi de mail à l'aide de javax.mail

je vais essayer d'envoyer un mail de cette manière:

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... - je 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 le résoudre? Quelqu'un peut-il m'aider? Merci!! 🙂

EDIT:

Si je crée un principal et le lancement de la méthode pour envoyer un mail, ça fonctionne bien!
Mon problème nés après j'ai lu le mail dans le dossier courrier:

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!
   }
}

J'ai Pensé à l'exception nés cause j'ai ouvert le magasin pour obtenir la boîte de réception mail alors j'ai modifier de cette façon:

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....

RÉSOLU DE CETTE FAÇON:

j'ai modifié cette ligne

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

à

Session mailSession = Session.getInstance(props);
Ouais, il y a un seul défaut Session instance. Si vous essayez d'obtenir la valeur par défaut une fois qu'elles ont été récupérées avec une autre authentificateur, il va échouer avec l'erreur que vous avez vu.
Pour moi la solution ici travaillé stackoverflow.com/questions/17590762/...

OriginalL'auteur JackTurky | 2012-06-29