2

Postfixメールサーバーからのメールを消費するJavaサービスがあります。1秒あたり約1通のメールを処理し、メールの内容を処理します。

ただし、非常に断続的に次の例外が発生します。

javax.mail.FolderClosedException : * BYE [ALERT] Fatal error: Invalid argument - javax.mail.FolderClosedException: * BYE [ALERT] Fatal error: Invalid argument
        at com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:1256)
        at com.sun.mail.imap.IMAPMessage.getSubject(IMAPMessage.java:335)
        at com.mailparser.data.MessageParser.parse(MessageParser.java:33)

プロセスを終了して再起動すると、同じメッセージに対して常に同じ例外がスローされるため、受信トレイでスタックします。

失敗した場所のコードスニペットは次のとおりです。

if (!message.getFolder().isOpen()) {
    message.getFolder().open(Folder.READ_WRITE);
    Logger.log("Tried to reopen folder"); //This is never hit
}
ReceivedEmail incomingMessage = new ReceivedEmail();
try {
    incomingMessage.setSubject(message.getSubject()); // Exception happens here
    [...]
} catch {
    catch (FolderClosedException ex) {
        message.getFolder().open(Folder.READ_WRITE); 
        Logger.log("Reopened", LogType.debug);
        return null;
    }
}

ご覧のとおり、件名を取得する前にフォルダが開いているかどうかを確認しているので、他の何かがこの失敗の原因になっていると思われます。スタックしたメッセージへの期待を投げると、まったく同じフォルダと接続を使用して正常に続行します。

誰かがこれについて何か考えを持っていますか?

ありがとう!

編集:

ビルの要求に応じたデバッグ情報:

   DEBUG IMAP: LOGIN command trace suppressed
    DEBUG IMAP: LOGIN command result: A0 OK LOGIN Ok.
    A1 CAPABILITY
    * CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION
    A1 OK CAPABILITY completed
    A2 LIST INBOX ""
    * LIST (\Marked \HasChildren) "." ""
    A2 OK LIST completed
    A3 LIST "" INBOX.TEST
    * LIST (\HasChildren) "." "INBOX.TEST"
    A3 OK LIST completed
    DEBUG: connection available -- size: 1
    A4 SELECT INBOX.TEST
    * FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
    * OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited
    * 1 EXISTS
    * 0 RECENT
    * OK [UIDVALIDITY 1351176418] Ok
    * OK [MYRIGHTS "acdilrsw"] ACL
    A4 OK [READ-WRITE] Ok

DEBUG IMAP: IMAPProtocol noop
A7 NOOP
A7 OK NOOP completed
A8 FETCH 1 (FLAGS)
* 1 FETCH (FLAGS (\Answered \Seen))
A8 OK FETCH completed.
A9 FETCH 1 (ENVELOPE INTERNALDATE RFC822.SIZE)
* BYE [ALERT] Fatal error: Invalid argument
4

0 に答える 0