android中的getContent()将输出作为MimeMultiPart,但我实际上想要电子邮件正文内容

时间:2013-01-09 12:08:40

标签: android imap javamail mime-types

我正在开发一个Android应用程序,我必须在其中获取电子邮件。为此,我使用了java的IMAP服务我得到文件夹,电子邮件ID等,但不是电子邮件正文部分,因为它在EditText小部件中,我得到一个像这样的行 - javax.mail.internet.MimeMultiPart@45eb3663

那么我们如何才能解决这个问题,并且能够获得电子邮件正文部分(如何发送) 我使用了代码,

bodyPart=message[arg2].getContent().toString();

3 个答案:

答案 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的类型。