1

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

那么我们如何解决这个问题,并且可以按原样获取电子邮件正文部分(它是如何发送的)我使用的代码如下,

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

3 回答 3

1

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

于 2013-01-09T14:27:22.140 回答
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 中使用它。确切的用途取决于您的应用程序,您需要自己弄清楚。

于 2013-01-09T12:17:24.030 回答
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的类型。

于 2013-12-05T15:32:06.160 回答