我正在开发一个使用javax.mail在邮箱中读取邮件的客户端邮件:
Properties properties = System.getProperties();
properties.setProperty("mail.store.protocol", "imap");
try {
Session session = Session.getDefaultInstance(properties, null);
Store store = session.getStore("pop3");//create store instance
store.connect("pop3.domain.it", "mail.it", "*****");
Folder inbox = store.getFolder("inbox");
FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
inbox.open(Folder.READ_ONLY);//set access type of Inbox
Message messages[] = inbox.search(ft);
String mail,sub,bodyText="";
Object body;
for(Message message:messages) {
mail = message.getFrom()[0].toString();
sub = message.getSubject();
body = message.getContent();
//bodyText = body.....
}
} catch (Exception e) {
System.out.println(e);
}
我知道getContent()
方法返回一个对象,因为内容可能是String
、MimeMultiPart
、SharedByteArrayInputstream
和其他(我认为)……有没有办法总是把文本放在消息体里面?谢谢!!
发布于 2016-01-09 12:19:20
此答案扩展了yurin's answer。他提出的问题是,MimeMultipart
的内容本身可能是另一个MimeMultipart
。在这种情况下,下面的getTextFromMimeMultipart()
方法在内容上递归,直到完全解析完消息体。
private String getTextFromMessage(Message message) throws MessagingException, IOException {
String result = "";
if (message.isMimeType("text/plain")) {
result = message.getContent().toString();
} else if (message.isMimeType("multipart/*")) {
MimeMultipart mimeMultipart = (MimeMultipart) message.getContent();
result = getTextFromMimeMultipart(mimeMultipart);
}
return result;
}
private String getTextFromMimeMultipart(
MimeMultipart mimeMultipart) throws MessagingException, IOException{
String result = "";
int count = mimeMultipart.getCount();
for (int i = 0; i < count; i++) {
BodyPart bodyPart = mimeMultipart.getBodyPart(i);
if (bodyPart.isMimeType("text/plain")) {
result = result + "\n" + bodyPart.getContent();
break; // without break same text appears twice in my tests
} else if (bodyPart.isMimeType("text/html")) {
String html = (String) bodyPart.getContent();
result = result + "\n" + org.jsoup.Jsoup.parse(html).text();
} else if (bodyPart.getContent() instanceof MimeMultipart){
result = result + getTextFromMimeMultipart((MimeMultipart)bodyPart.getContent());
}
}
return result;
}
发布于 2019-03-25 05:50:21
不要重复发明轮子!您可以简单地使用Apache Commons电子邮件(请参阅here)
Kotlin示例:
fun readHtmlContent(message: MimeMessage) =
MimeMessageParser(message).parse().htmlContent
如果电子邮件没有html内容,但它有普通内容(您可以通过hasPlainContent和hasHtmlContent方法进行检查),则应使用以下代码:
fun readPlainContent(message: MimeMessage) =
MimeMessageParser(message).parse().plainContent
Java示例:
String readHtmlContent(MimeMessage message) throws Exception {
return new MimeMessageParser(message).parse().getHtmlContent();
}
String readPlainContent(MimeMessage message) throws Exception {
return new MimeMessageParser(message).parse().getPlainContent();
}
发布于 2012-06-28 17:07:46
如果你想总是获取文本,那么你可以跳过其他类型,比如“multipart”等等。
Object body = message.getContent();
if(body instanceof String){
// hey it's a text
}
https://stackoverflow.com/questions/11240368
复制相似问题