我需要在我的帐户中按日期查找一个特定的电子邮件,所以我可以获取它的内容,但我使用的searchterm没有完成它的工作,匹配方法只是继续返回假和我的AsyncTask只是由于某种原因卡在该try块,即使folder.search也应该在数以千计的电子邮件快速工作。使用javamail的searchterm通过发送日期得到一封电子邮件
代码:
@Override
protected Void doInBackground(Void... params) {
try {
Properties properties = new Properties();
properties.put("mail.store.protocol", "imaps");
Session emailSession = Session.getDefaultInstance(properties);
Store store = emailSession.getStore("imaps");
store.connect("imap.gmail.com", username, password);
// create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_WRITE);
SearchTerm term = new SearchTerm(){
public boolean match(Message message) {
try {
if(message.getSentDate().toString().equals(emailSentDate)){
return true;
}
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
};
Message[] messages = emailFolder.search(term);
Object msgContent = messages[0].getContent();
if (msgContent instanceof Multipart) {
Multipart multipart = (Multipart) msgContent;
Log.e("BodyPart", "MultiPartCount: " + multipart.getCount());
for (int k = 0; k < multipart.getCount(); k++) {
BodyPart bodyPart = multipart.getBodyPart(k);
String disposition = bodyPart.getDisposition();
if (disposition != null && (disposition.equalsIgnoreCase("ATTACHMENT"))) {
DataHandler handler = bodyPart.getDataHandler();
content = handler.getName();
} else {
content = bodyPart.getContent().toString();
}
}
} else
content = messages[0].getContent().toString();
emailFolder.close(false);
store.close();
}
catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
哪里emailSentDate是我从以前的活动收到的字符串通过调用getSentDate()的toString()方法,有作为。我试过SendDateTerm太多,但我真的不能实现它,因为:
我不知道那是什么INT比较参数
我不能把一个日期变量捆绑在其他活动,并且不能将字符串转换为Date,所以我不知道如何将正确的Date对象传递给它的构造函数。
我该怎么办?
编辑:我只想通过发送日期进行搜索,因为我不知道UID,如果您只需要查找特定的电子邮件,请检查this。
再次感谢您!除日期比较之外,您还会推荐什么,以确保每次都有正确的电子邮件地址?如果我们在同一天收到来自同一个主题的多封电子邮件,该怎么办?是否有某种我不知道的ID可以在for循环中比较? –
好吧,我以为你说过你想按日期找到它!也许我们需要充分满足要求? :-)您需要了解IMAP UID(请参阅UIDFolder界面)和Message-ID标题,每个标题都可以帮助您解决问题,具体取决于您的要求。 –
哇好,如果我理解它的权利,我甚至不需要一个searchterm然后,只需使用getMessagebyUID()来代替。 –