我有一个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。