我创建了一个基本的电子邮件客户端,它从服务器获取电子邮件,并将其显示给用户。
我有比这更多的代码,但这是打印消息的主体:
// retrieve the messages from the folder in an array and print it
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
for (int i = 0, n = messages.length; i < n; i++) {
String content= messages[i].getContent().toString();
Message message = messages[i];
System.out.println("---------------------------------");
System.out.println("Email Number " + (i + 1));
System.out.println("Subject: " + message.getSubject());
System.out.println("From: " + message.getFrom()[0]);
System.out.println("Text: " + message.getContent().toString());
}
但是,当我运行程序时,我得到以下输出:
messages.length---4
---------------------------------
Email Number 1
Subject: Access for less secure apps has been turned on
From: Google <no-reply@accounts.google.com>
Text: javax.mail.internet.MimeMultipart@69ea3742
---------------------------------
Email Number 2
Subject: Three tips to get the most out of Gmail
From: Gmail Team <mail-noreply@google.com>
Text: javax.mail.internet.MimeMultipart@71318ec4
---------------------------------
Email Number 3
Subject: Stay more organized with Gmail's inbox
From: Gmail Team <mail-noreply@google.com>
Text: javax.mail.internet.MimeMultipart@21213b92
---------------------------------
Email Number 4
Subject: The best of Gmail, wherever you are
From: Gmail Team <mail-noreply@google.com>
Text: javax.mail.internet.MimeMultipart@a67c67e
Process finished with exit code 0
是否有任何方法可以显示实际消息,而不是mime multipart?例如,如果电子邮件阅读&#34; Hello World!&#34;我想在&#34; Text:&#34;之后打印出来。对于相关的电子邮件消息。
对此的任何帮助都将受到高度赞赏!!
答案 0 :(得分:0)
MimeMultipart本身的内容可以是MimeMultipart类型。
在这种情况下,您需要编写递归解析方法,直到解析整个正文。
if (bodyPart.getContent() instanceof MimeMultipart){
//Parse body again
}
答案 1 :(得分:0)
JavaMail FAQ有以下示例代码,但除非understand how MIME messages work,否则对您没有任何意义。
private boolean textIsHtml = false;
/**
* Return the primary text content of the message.
*/
private String getText(Part p) throws
MessagingException, IOException {
if (p.isMimeType("text/*")) {
String s = (String)p.getContent();
textIsHtml = p.isMimeType("text/html");
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;
}
答案 2 :(得分:0)
谢谢你的答案!
我找到了一个解决方案 - 而且我不会在这里发布确切的代码,但是我会说出我将来会使用的内容,以防将来有人遇到这个问题。
我基本上创建了一个Multipart对象,并按照建议使用了getContent()方法。
我还创建了一个BodyPart对象,从这个Multipart分支。
然后只是将其打印到系统输出的简单情况。