使用java邮件从模块

时间:2018-03-25 08:48:55

标签: java android email

我有一个Android项目,我正在使用java邮件从Gmail帐户接收邮件。

首先,我实现了一个用于处理邮件接收的类。我知道,每封邮件都有自己的邮件 内容类型(String,MultiPart,...)。我只对内容类型为String的邮件感兴趣。

好的,所以我实例化我的接收类,调用接收方法并从我的gmail帐户获取内容类型为String的所有邮件。 到现在为止还挺好。这完全适合我。

但是,当我从接收类创建一个Android模块(.aar文件)(相同的代码,没有更改)并将其导入到另一个Android项目时,接收邮件会有一种奇怪的行为。

导入Android模块后,我实例化接收类,调用接收方法,我得到和以前一样的邮件,但现在他们有了 内容类型为QPDecoderStream。

为了更好地理解,这是我的接收代码:

public List<Mail> receive() {

    List<Mail> mailList = new ArrayList<>();

    try {

        Properties properties = new Properties();
        properties.setProperty("mail.store.protocol", mConfig.getStoreProtocol());

        Session session = Session.getInstance(properties, null);

        mStore = session.getStore();
        mStore.connect(mConfig.getImapHost(), mUsername, mPassword);

        mInbox = mStore.getFolder(mConfig.getStoreFolder());
        mInbox.open(Folder.READ_ONLY);

        Message[] messages = mInbox.getMessages();

        for (Message message : messages) {

            String bodyPart = "";
            Object content = message.getContent();

                // Check for mail content type
                if (content instanceof String) {

                    // This code is executed by "normal" method call within an Android class

                    Logger.info(MailReceiver.class, "Mail content is String");
                    bodyPart = (String) content;
                } else if (content instanceof QPDecoderStream) {

                    // This code is executed by method call within an Android module

                    Logger.info(MailReceiver.class, "Mail content is QPDecoderStream");

                    BufferedInputStream in = new BufferedInputStream((InputStream) content);
                    ByteArrayOutputStream out = new ByteArrayOutputStream();

                    int c;

                    while ((c = in.read()) != -1) {

                        out.write(c);
                    }

                    bodyPart = new String(out.toByteArray());
                }

            Mail mail = new Mail();

            mail.setSubject(message.getSubject());
            mail.setDate(message.getSentDate().toString());
            mail.setContent(bodyPart);

            mailList.add(mail);
        }
    } catch (Exception e) {

        Logger.error(MailReceiver.class, "Exception occurred while receiving mail: " + e.getMessage());
    } finally {

        closeInbox();
        closeStore();
    }

    return mailList;
}

我希望我能充分解释我的问题,我很乐意提出一些建议。

提前致谢。

Chris P。

0 个答案:

没有答案