Abs*_*Abs 4 java gmail jakarta-mail
我正在使用javamail,我无法从我的Gmail电子邮件中获取HTML.我有以下内容:
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "myemail@gmail.com", "password");
System.out.println(store);
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
Message messages[] = inbox.getMessages();
for(Message message:messages) {
System.out.println(message); // com.sun.mail.imap.IMAPInputStream@cec0c5
Run Code Online (Sandbox Code Playgroud)
以上一切正常,但我无法打印或获取实际的HTML或文本电子邮件.我只是得到某种InputStream,我如何轻松处理这个以获取电子邮件的原始HTML?
我也试过循环阅读消息,但这并没有让我走得太远:
Message message[] = inbox.getMessages();
for (int i=0, n=message.length; i<n; i++) {
System.out.println(i + ": " + message[i].getFrom()[0]
+ "\t" + message[i].getSubject());
String content = message[i].getContent().toString();
if (content.length() > 200)
content = content.substring(0, 600);
System.out.print(content);
Run Code Online (Sandbox Code Playgroud)
}
非常感谢所有的hlep.
问题是您获得的数据通常是mime/multipart流的原始数据.你需要做这样的事情:
for(Message message:messages) {
if(javax.mail.Multipart.class.isInstance(message)){
Multipart parts = (Multipart)msg.getContent(), innerPart;
int i;
for(i=0;i<parts.getCount();i++){
javax.mail.BodyPart p = parts.getBodyPart(i);
if("text/html".equals(p.getContentType())){
// now you can read out the contents from p.getContent()
// (which is typically an InputStream, but depending on your javamail
// libraries may be something else
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
祝好运.
该InputStream对象包含电子邮件的正文。您需要读取整个流才能读取消息的整个正文。例如,这篇 SO 文章详细介绍了如何使用 Apache 库编写完整的InputStream内容。这将是一个很好的起点,因为您可以将整个消息正文打印到控制台。否则,您将需要使用一些缓冲区等,将数据从流中提取出来,并将其放入您想要放入的任何内容中。还有一篇 SO post详细介绍了使用相同的库如何转换一个变成一个。OutputStreamSystem.outInputStreamString
| 归档时间: |
|
| 查看次数: |
24077 次 |
| 最近记录: |