0

私はApacheJamesをリンクするWebメールを開発しましたが、それは機能します。ただし、一部のユーザーはジェームズからのメールを受信できません。2人のユーザーのログを設定mailSession.setDebug(true)してトレースします(saは受信できますが、もう1つは受信できません)。違いは以下のとおりです。

メールを正常に受信できるユーザー(ユーザーsa):

[2012-11-15 14:24:12] com.csc.mail.jsh.mail.core.ReceiveMail : [INFO ]  - trying to receive emails from james server...
C: STAT
S: +OK 2 2584
C: NOOP
S: +OK
C: TOP 1 0
S: +OK Message follows
...

他のユーザーは失敗を受け取ります(ユーザーチャイ):

[2012-11-15 14:22:01] com.csc.mail.jsh.mail.core.ReceiveMail : [INFO ]  - trying to receive emails from james server...
C: STAT
S: -ERR
C: QUIT
S: +OK Apache James POP3 Server signing off.
[2012-11-15 14:22:03] com.csc.mail.jsh.mail.core.ReceiveMail : [ERROR]  - Folder open failed:javax.mail.MessagingException: Open failed;
nested exception is:
    java.io.IOException: STAT command failed: null
    at com.sun.mail.pop3.POP3Folder.open(POP3Folder.java:228)
    at com.csc.mail.jsh.mail.core.ReceiveMail.receive(ReceiveMail.java:82)
    at com.csc.mail.jsh.mail.core.ReceiveMail.run(ReceiveMail.java:222)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.IOException: STAT command failed: null
    at com.sun.mail.pop3.Protocol.stat(Protocol.java:366)
    at com.sun.mail.pop3.POP3Folder.open(POP3Folder.java:203)
    ... 3 more

私の受信コード:

Session mailSession = Session.getInstance(System.getProperties(), null);
mailSession.setDebug(true);
Store store = null;
Folder folder = null; //javax.mail.Folder
try {
    store = mailSession.getStore("pop3");
    store.connect(Property.getPop3(), userName, password);
    logger.info("trying to receive emails from james server...");
    folder = store.getFolder("INBOX");
    try {
        if (!folder.isOpen()) {
            folder.open(Folder.READ_WRITE); //the point of throwing the exception
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    //receive email from james server.
} catch (Exception e) {
    logger.error("Email Receive Error!" + StackTraceStr.st2str(e));
    try {
        folder.close(true);
    } catch (Exception e2) {
    }
} finally {
    try {
        store.close();
    } catch (Exception cloex) {
    }
}

ここに投稿しました。助けてくれてありがとう!

4

2 に答える 2

0

このために別のスレッドを開始した理由がわかりません...

サーバーに問題があります。サーバーログを確認してください。STATコマンドは失敗しますが、失敗の理由は報告されません。

于 2012-11-15T19:20:46.923 に答える
0

私はApacheJamesと連絡を取り、ついに答えを見つけました。あなたはここでそれを見つけることができます:STATコマンドは時々失敗しました。ページの最後に、スレッドがリストされていました。

于 2012-11-30T02:02:47.867 に答える