2017-03-14 13 views
0

import javax.mail.*を使用してメッセージを取得しようとしています。ここでクラスでメールを受信

、すべての作品:

Session session = Session.getDefaultInstance(props, null); 
Store store = session.getStore(provider); 
try { 
    store.connect(host, username, password); 
    Folder inbox = store.getFolder("INBOX"); 
    if (inbox == null) { 
     System.out.println("No INBOX"); 
     System.exit(1); 
    } 
    inbox.open(Folder.READ_ONLY); 
    Message[] messages = inbox.getMessages(); 
    for (int i = 0; i < messages.length; i++) { 
     System.out.println("Message " + (i + 1)); 
     messages[i].writeTo(System.out); 
    } 
    inbox.close(false); 
    store.close(); 
} 
catch (IOException e){ 
    e.printStackTrace(); 

しかし、あなたは別のクラスにメールの受信を取る場合は、エラー「例外がスレッドで」メイン「javax.mail.MessagingException:接続されていません」があります

発信者:

Session session = Session.getDefaultInstance(props, null); 
Store store = session.getStore(provider); 
Mail mail=new Mail(); 
Folder inbox = store.getFolder("INBOX"); 
store.connect(host, username, password); 
inbox = store.getFolder("INBOX"); 
mail.GetMessage(host,username,password,inbox,store); 

クラスメール:

public void GetMessage(String host,String username,String password,Folder inbox,Store store) throws MessagingException, IOException { 
    try { 
     inbox = store.getFolder("INBOX"); 
     if (inbox == null) { 
      System.out.println("No INBOX"); 
      System.exit(1); 
     } 
     inbox.open(Folder.READ_ONLY); 
     Message[] messages = inbox.getMessages(); 
     for (int i = 0; i < messages.length; i++) { 
      System.out.println("Message " + (i + 1)); 
      messages[i].writeTo(System.out); 
     } 
     inbox.close(false); 
     store.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

カプセル化が壊れています。 'Mail.GetMessage()'はホスト/ユーザ名/パスワードをとり、メールサーバ自身に接続するか、**または**それは 'store'(そしてフォルダ名)を取るべきです、' getFolder() 'on **または**既に見つかった 'Folder inbox'を取り、それを操作する必要があります。しかし、 'GetMessage()'がそれを開けなかった場合、 'GetMessage()'の 'store'を閉じるべきではありません。また、メールを取得しようとすると、ストアが閉じられたまたは破損している。適切なカプセル化を使用してコードを再構築します。 – AJNeufeld

+0

また、スタックトレースを見て、例外が発生している行を特定し、問題の説明に**を含めてください。 – AJNeufeld

+0

問題は単純な注文受注のエラーであり、今後の読者には役立たない可能性があるため、この質問を議論の対象外としています。 – AJNeufeld

答えて

1

、あなたはそれを発信者をやっているので、それは無用だ

Folder inbox = store.getFolder("INBOX"); 

store.connect(host, username, password); 

を移動し、メールクラスに

inbox = store.getFolder("INBOX"); 

を削除します。

PS。 Javaの命名規則に従うには、のGetMessage()メソッドの名前をに変更します。getMessage()

1

Change Session.getDefaultInstance to Session.getInstance.

あなたのコードは「受信トレイ」で何をしているのか混同しています。 GetMessageメソッドは、パラメータを使用せずに上書きします。

問題は、呼び出し元のコードがストアに接続する前にINBOXフォルダを取得しようとしているためです。あなたが呼び出したコードで "inbox"の使用を取り除くと、うまくいくでしょうし、はるかに意味があります!呼び出し側で

関連する問題