簡體   English   中英

解析通過imap收到的gmail消息時出現javamail-1.4.5錯誤

[英]javamail-1.4.5 error at parsing gmail message received via imap

我正在使用javamail-1.4.5從gmail(imap)獲取消息。 如果Content-Disposition具有未引用的參數,則方法getDisposition失敗。

消息部分:

Content-Transfer-Encoding: 7bit
Content-Type: message/rfc822
Content-Disposition: attachment;
    creation-date=Wed, 11 Feb 2015 10:23:48 GMT;
    modification-date=Wed, 11 Feb 2015 10:23:48 GMT

例外:

javax.mail.internet.ParseException: Expected ';', got ","
        at javax.mail.internet.ParameterList.<init>(ParameterList.java:289)
        at javax.mail.internet.ContentDisposition.<init>(ContentDisposition.java:100)
        at javax.mail.internet.MimeBodyPart.getDisposition(MimeBodyPart.java:1076)

UPD1:這是我的代碼的一部分。 我在方法handlePart的第1行中遇到錯誤

private void handleMessage(Message message) {
    Object content = message.getContent();
    if(content instanceof Multipart) {
        handleMultipart((Multipart) content);
    }
    else {
        handlePart(message);
    }
}

private void handleMultipart(Multipart mp) {
    for(int i = 0; i < mp.getCount(); i++) {
        Part part = mp.getBodyPart(i);
        Object content = part.getContent();
        if(content instanceof Multipart) {
            handleMultipart((Multipart) content);
        }
        else {
            handlePart(part);
        }
    }
}

private void handlePart(Part part) {
    String disposition = part.getDisposition(); //GETTING ERROR
    String contentType = part.getContentType();
    if(disposition == null) {
        if(contentType.toLowerCase().startsWith("text/html")) {
            html = (String) part.getContent();
        }
        else if(contentType.toLowerCase().startsWith("text/plain")) {
            text = (String) part.getContent();
        }
        else {
            handleAttachment(part);
        }
    }
    else if(disposition.equalsIgnoreCase(Part.ATTACHMENT)) {
        handleAttachment(part);
    }
    else if(disposition.equalsIgnoreCase(Part.INLINE)) {
        handleAttachment(part);
    }
}

消息格式錯誤。 哪個程序創建了消息? 請將此錯誤報告給該程序的所有者。

您可以通過將系統屬性“ mail.mime.parameters.strict”設置為“ false”來解決此錯誤。 有關javax.mail.internet包ParameterList類的信息,請參見javadocs

另外,您可能需要升級到JavaMail的當前1.5.2版本

它失敗,因為存在語法錯誤。 缺乏報價是非法的。 對於異常,您無能為力,只需提交補丁,而圍繞內容處置和內容類型錯誤進行補丁就永無休止。 以我的經驗,Content-Disposition所獲得的不僅僅是錯誤。 我至少寫了十二種解決方法(不適用於javamail),每種方法都帶有單元測試。 那是艱苦的工作,可能不值得。

由於必須為未指定的CD提供適當的備用,因此您也可以利用該備用來進行錯誤和荒謬的處理:

String disposition = null;
try {
    disposition = part.getDisposition();
} catch(ParseException x) {
    // treat Content-Disposition as unspecified if it cannot be parsed
    disposition = null;
}

順便說一句:使用“內容類型:文本/純文本; utf8”向您發送一條消息,並檢查您是否也處理了該解析異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM