提问者:小点点

android中的getContent()以MimeMultiPart的形式提供输出,但我实际上想要电子邮件正文内容


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

那么,我们如何解决这个问题,并可以得到电子邮件正文部分,因为它是(它是如何发送的)我用代码一样,

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

共3个答案

匿名用户

如果一封电子邮件有多个部分(例如HTML和纯文本部分或附件),您将得到一个javax . mail . internet . mime multipart部分。

当您查看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中使用它。具体用途取决于您的应用程序,您需要自己弄清楚。

匿名用户

邮件可以是纯文本,html或多部分(文本附件),多部分替代(文本html)等。您必须遍历每个 BodyPart 以了解其类型,然后相应地获取内容。这个javamail常见问题解答条目可以帮助你。
也在这里看到我的类似问题。

匿名用户

如果使用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。