我需要按日期在我的帐户中找到一个特定的电子邮件,因此我可以获取其内容,但我使用的searchterm没有完成其工作,匹配方法只是保持返回false并且我的AsyncTask只是停留在try块中出于某种原因,即使folder.search也应该在成千上万的电子邮件中快速工作。
代码:
@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,所以我不知道如何将正确的Date对象传递给它构造
我该怎么办?
编辑:我只想通过发送日期进行搜索,因为我不了解UID,如果您只是需要查找特定的电子邮件,请查看this。
答案 0 :(得分:1)
比较参数在javadocs中描述,它表示您正在进行的比较类型,例如==,!=,&gt;等。
有很多方法可以为特定日期创建Date对象。例如,您可以使用SimpleDateFormat对象来解析字符串并返回日期。
编写自己的SearchTerm会导致在客户端上进行比较;内置的SearchTerms使用IMAP SEARCH功能在服务器上进行搜索。
确保您使用的是current version of JavaMail。日期搜索中存在最近修复的错误。
另请注意,IMAP日期搜索仅比较日期,而不是时间。