2013-07-30 48 views
2

在我的服務器我收到的電子郵件不斷從Gmail ..的MimeMessage電子郵件獲得回覆身體沒有以前函授

我接納他們爲的MimeMessage類型。

我在做什麼,到目前爲止被提取正文與方法:

private String getText(Part p) throws MessagingException, IOException { 
    if (p.isMimeType("text/*")) { 
     String s = (String) p.getContent(); 
     return s; 
    } 

if (p.isMimeType("multipart/alternative")) { 
    // prefer html text over plain text 
    Multipart mp = (Multipart) p.getContent(); 
    String text = null; 
    for (int i = 0; i < mp.getCount(); i++) { 
    Part bp = mp.getBodyPart(i); 
    if (bp.isMimeType("text/plain")) { 
     if (text == null) 
     text = getText(bp); 
     continue; 
    } else if (bp.isMimeType("text/html")) { 
     String s = getText(bp); 
     if (s != null) 
     return s; 
    } else { 
     return getText(bp); 
    } 
    } 
    return text; 
} else if (p.isMimeType("multipart/*")) { 
    Multipart mp = (Multipart) p.getContent(); 
    for (int i = 0; i < mp.getCount(); i++) { 
    String s = getText(mp.getBodyPart(i)); 
    if (s != null) 
     return s; 
    } 
} 

return null; 
} 

我的問題,現在是基於電子郵件,我得到的是「在回答」以前的電子郵件。 當我提取這些電子郵件爲他們的文本我收到「X寫在Y ...」,然後所有以前的信件。 我如何獲得新的回覆文本? (沒有以前的信件)?

謝謝。

回答

2

我敢肯定,這已經在前面討論的計算器,但我會告訴你做搜索...

答案很簡單:有做這個的標準方法。不同的郵寄者選擇不同的技術將原始郵件的文本嵌入到回覆郵件中。有一些常見的約定,你可以編寫啓發式方法來識別這些約定,但是因爲它們是啓發式的,它們有時會失敗。 JavaMail在這裏沒有什麼可以幫你的;這只是一個字符串處理問題。

+0

謝謝,我有一個預感它是這樣的。 – Urbanleg

1

對於Urbanleg來說可能會晚一公升,但它可以幫助其他人。 此代碼爲我工作。就像比爾說的那樣,是一個與Strings合作的作品。 接收者的電子郵件地址始終在回覆部分,使用它像引用。

public static String cleanReplyFromBodyEmail(String body, String emailAdress){ 
    if (!body.contains(emailAdress)) 
     return body; 

    String bodyWoReply = body.split(emailAdress)[0]; 
    String[] bodyLines = bodyWoReply.split("\\n"); 
    if(bodyLines.length <= 1) 
     bodyLines = bodyWoReply.split("\\r"); 
    String finalBody = ""; 
    for (int i=0; i < (bodyLines.length - 1); i++){ 
     finalBody += bodyLines[i] + "\n"; 
    } 
    return finalBody; 
} 
相關問題