日期:2014-05-19  浏览次数:20777 次

javamail 收邮件时候内容重复 怎么过滤重复内容.... 100分给了.
一些邮件发送出来时,既有plain又有html,为了防止一些无法解析html的地方也能收到邮件内容,才重复的发2段同样的内容,但是我在解析时候,使用javamail的MimeMessage解析,网上的例子也不少,但是这样解析出来的content就包含的重复的部分,怎样去除掉plain部分的呢? 
同时要考虑到有的邮件只有plain部分,这时候肯定是不能去除的。应该怎么做呢? 100分给了。。

代码:
public void getMailContent(Part part) throws Exception {  
String contentType=part.getContentType();
int nameindex = contentType.indexOf("name");
boolean conname = false;
if (nameindex != -1)
conname = true;
System.out.println("CONTENTTYPE: " + contentType);
if (part.isMimeType("text/plain") && !conname) {
bodytext.append((String) part.getContent());
} else if (part.isMimeType("text/html") && !conname) {
bodytext.append((String) part.getContent());

else if (part.isMimeType("multipart/*")) {
Multipart multipart = (Multipart) part.getContent();
int counts = multipart.getCount();
for (int i = 0; i < counts; i++) {
getMailContent(multipart.getBodyPart(i));
}


else if (part.isMimeType("message/rfc822")) {
getMailContent((Part) part.getContent());


else {
}
}

------解决方案--------------------
public void getMailContent(Part part, boolean flag) throws Exception {
String contentType=part.getContentType();
int nameindex = contentType.indexOf("name");
boolean conname = false;
if (nameindex != -1)
conname = true;
System.out.println("CONTENTTYPE: " + contentType);
if (part.isMimeType("text/plain") && !conname && flag) {
bodytext.append((String) part.getContent());
flag= false;
} else if (part.isMimeType("text/html") && !conname && flag) {
bodytext.append((String) part.getContent());
} else if (part.isMimeType("multipart/*")) {
Multipart multipart = (Multipart) part.getContent();
int counts = multipart.getCount();
for (int i = 0; i < counts; i++) {
getMailContent(multipart.getBodyPart(i));
}
}
}

你从外面传一个变量进来,判断一下,如果取了"text/plain"就不再取"text/html"不可以吗?
------解决方案--------------------
探讨
public void getMailContent(Part part, boolean flag) throws Exception {
String contentType=part.getContentType();
int nameindex = contentType.indexOf("name");
boolean conname = false;
if ……

------解决方案--------------------
根据客户端的设置来做,是html的就读html部分,找不到再读plain部分,否则只取plain部分。
------解决方案--------------------
你这个getMailContent方法在外面是怎么调用的呀。
是要循环的吧?
那你就
boolean flag = true;
while(条件) {
getMailContent(part, flag);
}

就这样不行吗?

当读取过"text/plain",flag就被改成false了,再就不会进到"text/html"里面了