2017-09-15 11 views
1

Essayez d'utiliser JavaMail pour la première fois. Lors de la mise en détails, il imprime vrai (comme si elle était connectée), mais en essayant de trouver un dossier, cela ne fonctionne pas.Javamail ne se connecte pas

private static void login() throws MessagingException { 
    String host = "imap.gmail.com"; 
    String username = "[email protected]"; 
    String password = "password"; 
    Properties props = new Properties(); 
    props.setProperty("mail.imap.ssl.enable", "true"); 
    props.setProperty("mail.store.protocol", "imaps"); 
    session = Session.getInstance(props); 
    store = session.getStore("imaps"); 
    store.connect(host, 993, username, password); 
    System.out.println(store.isConnected()); //THIS HERE RETURNS TRUE 
} 

public static void check() 
{ 
    try { 
     //create the folder object and open it 
     Folder emailFolder = store.getFolder("INBOX"); //ENDS PROGRAM LOGGING, "Not Connected" 
     emailFolder.open(Folder.READ_ONLY); 

     javax.mail.Message[] messages = emailFolder.getMessages(); 

     for (int i = 0, n = messages.length; i < n; i++) { 
      javax.mail.Message message = messages[i]; 
      if(message.getSubject().contains("Optimism") && message.getSubject().contains("New reply to watched thread")) { 
       for(Guild g : jda.getGuilds()) { 
        if(g.getName().equalsIgnoreCase("Optimism")) 
        for (TextChannel c : g.getTextChannels()) 
         if (c.getName() == "staff_chat") { 
          c.sendMessage("**New Thread Reply! - " + new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new Date()) + " EST.").queue(); 
         } 
       } 

      } 

     } 

     //close the store and folder objects 
     emailFolder.close(false); 
     store.close(); 

    } catch (NoSuchProviderException e) { 
     e.printStackTrace(); 
    } catch (MessagingException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Everthing dans l'instruction if de la première boucle tout fonctionne

NOTE: Il est dans deux méthodes comme la méthode de contrôle est appelé toutes les 2 minutes.

+0

Que représente 'jda' ici? Peut-être un problème avec ceci – Sanjeev

+0

Que se passe-t-il si vous faites 'println (store.isConnected())' dans la méthode 'check()', où cela est plus pertinent? – Andreas

+0

@Sanjeev jda fait partie d'une autre api que j'utilise pour la discorde (vous en avez peut-être entendu parler). – JackChap77

Répondre

2

Comme vous l'avez dit, cette méthode check() est appelée toutes les deux minutes. Cela créera un problème lorsque vous fermerez votre objet magasin store.close(). Cela fonctionnera donc juste la première fois et après ça, ça ne marchera pas.

Soit vous appelez login() également toutes les deux minutes juste avant check() ou ne fermez pas le magasin en contrôle et laissez-le ouvert/connecté.

Espérons que cela aide.

+1

Droit, et vous ne pouvez pas vous attendre à rester connecté pour toujours, vous devrez donc gérer cette affaire aussi. –

+0

D'accord ... cela doit être une connexion temporisée. – Sanjeev

+0

J'ai fini par les mettre tous dans une méthode pour voir si cela a fonctionné et il l'a fait. Merci de clarifier pourquoi cela fonctionnerait. – JackChap77