我需要在我的帳戶中按日期查找一個特定的電子郵件,所以我可以獲取它的內容,但我使用的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()來代替。 –