2017-09-15 20 views
1

初めてJavaMailを使用しようとしています。詳細を入力すると、(接続されているかのように)実際に印刷されますが、フォルダを見つけようとすると機能しません。最初のループからのif文で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(); 
    } 
} 

Everthingすべてが

動作注記:チェック方法は、すべて2分と呼ばれているとしてそれは二つの方法であります。

+0

ここでは 'jda'とは何ですか?この問題があるかもしれません – Sanjeev

+0

'check()'メソッドで 'println(store.isConnected())'を実行するとどうなりますか? – Andreas

+0

@Sanjeev jdaは、私が不和のために使っている別のAPIの一部です(あなたはそれを聞いたことがあります)。 – JackChap77

答えて

2

あなたが言ったように、そのcheck()メソッドは2分ごとに呼び出されています。 store.close()に店舗オブジェクトをクローズすると問題が発生します。だから、それはちょうど最初に動作し、その後は動作しません。

check()の直前の2分ごとにlogin()に電話をかけても、店舗を閉じておいても、開いておかないでください。

これが役に立ちます。

+1

あなたは永遠に接続しているとは思えませんので、その場合も処理する必要があります。 –

+0

同意します...これはタイムアウトした接続でなければなりません。 – Sanjeev

+0

私はそれがうまくいっているかどうかを調べるために、1つの方法でそれらをすべて入れました。それがなぜ機能するのかを明確にしていただきありがとうございます。 – JackChap77

関連する問題