我正在开发一个Android应用程序,我必须在其中获取电子邮件。为此,我使用了java的IMAP服务我得到文件夹,电子邮件ID等,但不是电子邮件正文部分,因为它在EditText小部件中,我得到一个像这样的行 - javax.mail.internet.MimeMultiPart@45eb3663
那么我们如何才能解决这个问题,并且能够获得电子邮件正文部分(如何发送) 我使用了代码,
bodyPart=message[arg2].getContent().toString();
答案 0 :(得分:1)
如果电子邮件包含多个部分(例如HTML和纯文本部分或附件),则会获得javax.mail.internet.MimeMultiPart。
当您查看API文档时,您会发现可以使用getCount()
来获取部分数量,并使用getBodyPart(int index)
来获取特定部分。
您必须找出您感兴趣的部分。以下代码示例抓取所有部分并打印内容:
MimeMultiPart multiPart = message[arg2].getContent();
for(int i = 0; i < multiPart.getCount(); i++) {
Object content = multiPart.getBodyPart(i).getContent();
System.out.println(content);
}
希望这有助于您了解如何接收电子邮件以及如何使用Java执行某些操作。确切的用途取决于您的应用程序,您需要自己弄清楚。
答案 1 :(得分:1)
邮件可以是纯文本,html或Multipart(文本+附件),Multipart Alternative(文本+ html)等。 您必须遍历每个BodyPart以了解它的类型,然后相应地获取内容。此javamail常见问题entry可以为您提供帮助 另请参阅我的类似问题here。
答案 2 :(得分:0)
如果您使用JavaMail,代码段可能会更改为:
String contentType = message.getContentType().toLowerCase(Locale.Canada);
if (contentType.startsWith("multipart/alternative")) {
// here is data handler part
DataHandler dataHandler = message.getDataHandler();
DataSource dataSource = dataHandler.getDataSource();
if (dataSource instanceof IMAPMultipartDataSource) {
IMAPMultipartDataSource imapDataSource = (IMAPMultipartDataSource) dataSource;
int count = imapDataSource.getCount();
...
}
}
这个想法是使用DataHandler,因为消息是IMAPMessage的类型,而不是直接在MultiPart的类型。