用javamail 收邮件出现:javax.mail.internet.ParseException

请大侠们给点解决方法。。。。
一下是取得邮件内容的代码
public static String getMailContent(Part part){
StringBuffer bodytext = new StringBuffer();
try{
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(contenttype.startsWith("multipart/alternative")){
[color=red] Multipart multipart = (Multipart)part.getContent();[/color]
String p =getMailContent((Part)multipart.getBodyPart(1));
bodytext.append(p);
}
}catch(Exception ex){
ex.printStackTrace();
}
return bodytext.toString();
}
在解析带附件的邮件是出现的异常。。。

javax.mail.internet.ParseException
at javax.mail.internet.ParameterList.<init>(ParameterList.java:61)
at javax.mail.internet.ContentType.<init>(ContentType.java:83)
at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:269)
at javax.mail.internet.MimeMultipart.getBodyPart(MimeMultipart.java:172)
at Mail.MailManager.getMailContent(MailManager.java:303)


期待中。。。。。。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaMail 可以获取邮件内容并删除引用部分的具体方法如下: 1. 使用 `Session` 对象创建一个 `Store` 对象,连接到邮件服务器,并打开相应的文件夹(例如 `INBOX`)。 ```java Properties props = new Properties(); props.setProperty("mail.store.protocol", "imap"); Session session = Session.getInstance(props); Store store = session.getStore(); store.connect(host, username, password); Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); ``` 2. 获取邮件对象并读取其内容。 ```java Message message = folder.getMessage(messageNumber); String contentType = message.getContentType(); Object content = message.getContent(); ``` 3. 如果邮件是纯文本类型,可以直接读取内容,如果是 HTML 或者带有附件的邮件,需要进行相应的处理。 ```java if (contentType.contains("text/plain")) { String text = (String) content; // 删除引用部分 text = deleteReply(text); System.out.println(text); } else if (contentType.contains("text/html")) { String html = (String) content; // 删除引用部分 html = deleteReply(html); // 使用 Jsoup 等库解析 HTML 内容 Document doc = Jsoup.parse(html); System.out.println(doc.text()); } else if (contentType.contains("multipart")) { Multipart multipart = (Multipart) content; for (int i = 0; i < multipart.getCount(); i++) { BodyPart bodyPart = multipart.getBodyPart(i); if (bodyPart.getContentType().contains("text/plain")) { String text = (String) bodyPart.getContent(); // 删除引用部分 text = deleteReply(text); System.out.println(text); } else if (bodyPart.getContentType().contains("text/html")) { String html = (String) bodyPart.getContent(); // 删除引用部分 html = deleteReply(html); // 使用 Jsoup 等库解析 HTML 内容 Document doc = Jsoup.parse(html); System.out.println(doc.text()); } else if (bodyPart.getContentType().contains("multipart")) { // 处理嵌套的 multipart 部分 // ... } else { // 处理附件部分 // ... } } } ``` 4. 删除邮件引用部分。可以使用正则表达式或者字符串处理函数等方法实现。 ```java private static String deleteReply(String text) { // 删除带有 ">" 前缀的行 String regex = "(?m)^\\s*>.*$"; text = text.replaceAll(regex, ""); // 删除带有 "On ... wrote:" 或者 "在 ... 写道:" 前缀的部分 regex = "(?m)^\\s*(On\\s.*?wrote:|在\\s.*?写道:).*$"; text = text.replaceAll(regex, ""); // 删除多余的空行和空格 regex = "(?m)^[ \t]*\r?\n|^[ \t]+"; text = text.replaceAll(regex, ""); return text; } ``` 5. 关闭文件夹和存储库。 ```java folder.close(false); store.close(); ``` 完整的代码示例: ```java import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class ReadEmail { public static void main(String[] args) throws Exception { String host = "imap.gmail.com"; String username = "username@gmail.com"; String password = "password"; Properties props = new Properties(); props.setProperty("mail.store.protocol", "imap"); Session session = Session.getInstance(props); Store store = session.getStore(); store.connect(host, username, password); Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); int messageNumber = 1; Message message = folder.getMessage(messageNumber); String contentType = message.getContentType(); Object content = message.getContent(); if (contentType.contains("text/plain")) { String text = (String) content; text = deleteReply(text); System.out.println(text); } else if (contentType.contains("text/html")) { String html = (String) content; html = deleteReply(html); Document doc = Jsoup.parse(html); System.out.println(doc.text()); } else if (contentType.contains("multipart")) { Multipart multipart = (Multipart) content; for (int i = 0; i < multipart.getCount(); i++) { BodyPart bodyPart = multipart.getBodyPart(i); if (bodyPart.getContentType().contains("text/plain")) { String text = (String) bodyPart.getContent(); text = deleteReply(text); System.out.println(text); } else if (bodyPart.getContentType().contains("text/html")) { String html = (String) bodyPart.getContent(); html = deleteReply(html); Document doc = Jsoup.parse(html); System.out.println(doc.text()); } else if (bodyPart.getContentType().contains("multipart")) { // 处理嵌套的 multipart 部分 // ... } else { // 处理附件部分 // ... } } } folder.close(false); store.close(); } private static String deleteReply(String text) { String regex = "(?m)^\\s*>.*$"; text = text.replaceAll(regex, ""); regex = "(?m)^\\s*(On\\s.*?wrote:|在\\s.*?写道:).*$"; text = text.replaceAll(regex, ""); regex = "(?m)^[ \t]*\r?\n|^[ \t]+"; text = text.replaceAll(regex, ""); return text; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值