2017-09-15 47 views
1

尝试首次使用JavaMail。在详细说明它打印真实(就像它被连接),但当试图找到一个文件夹,它不起作用。Javamail未连接

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

寄托都在从第一循环的if语句的所有作品

注:这是在两种方法作为检查方法被调用,每2分钟。

+0

'jda'代表什么?这可能会带来一些问题 – Sanjeev

+0

如果在'check()'方法中执行'println(store.isConnected())',会发生什么? – Andreas

+0

@Sanjeev jda是我用于不和谐的另一个API的一部分(您可能听说过它)。 – JackChap77

回答

2

正如你所说,check()方法每两分钟就会调用一次。当你关闭你的商店对象时,它会产生问题store.close()。所以它会在第一次运行,之后不会运行。

您也可以在check()之前每隔两分钟致电login()或者不要关闭存放并保持打开/连接状态。

希望这会有所帮助。

+1

没错,你不能指望永远保持连接,所以你也需要处理这种情况。 –

+0

同意......这必须是定时连接。 – Sanjeev

+0

我最终把它们全部放在一个方法中,看它是否有效,它是否成功。感谢您澄清为什么这会起作用。 – JackChap77