JavaMail-包含多个搜索词的问题
我想从我的gmail帐户中获取最近的、未读的、在特定文件夹中有特定主题的电子邮件。我正在使用JavaMail API,如下所示,但它返回0个结果。然而,如果我只使用subjectTerm,我会看到结果。请告诉我哪里出了问题。多谢各位 请注意,为了简化代码,我使用了下面的消息[0],而不是在消息数组中循环,将其粘贴到这里JavaMail-包含多个搜索词的问题,java,jakarta-mail,Java,Jakarta Mail,我想从我的gmail帐户中获取最近的、未读的、在特定文件夹中有特定主题的电子邮件。我正在使用JavaMail API,如下所示,但它返回0个结果。然而,如果我只使用subjectTerm,我会看到结果。请告诉我哪里出了问题。多谢各位 请注意,为了简化代码,我使用了下面的消息[0],而不是在消息数组中循环,将其粘贴到这里 public void openMailBox(String hostname, String username, String password, String fo
public void openMailBox(String hostname, String username, String password, String folderName, String subject) throws MessagingException, GeneralSecurityException, IOException{
props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imaps.host", "imap.gmail.com");
props.setProperty("mail.imaps.port", "993");
props.setProperty("mail.imaps.ssl.enable", "true");
props.put("mail.imaps.ssl.socketFactory", new MailSSLSocketFactory());
session = Session.getInstance(props);
store = session.getStore();
store.connect(username, password);
folder = store.getFolder(folderName);
folder.open(Folder.READ_ONLY);
messages = folder.search(getSearchTerm(subject));
if (messages[0].isMimeType("multipart/*")){
Multipart multipart = (Multipart) messages[0].getContent();
for(int i=0;i<multipart.getCount();i++) {
BodyPart bodyPart = multipart.getBodyPart(0);
if (bodyPart.isMimeType("text/*")) {
msg = msg+bodyPart.getContent().toString();
}
}
}else{
msg = messages[0].getContent().toString();
}
System.out.println(msg);
folder.close(true);
store.close();
}
public SearchTerm getSearchTerm(String subject){
subjectTerm = new SubjectTerm(subject);
unseenFlagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
recentFlagTerm; = new FlagTerm(new Flags(Flags.Flag.RECENT), true);
return new AndTerm(subjectTerm, new AndTerm(unseenFlagTerm, recentFlagTerm));
}
}
public void openMailBox(字符串主机名、字符串用户名、字符串密码、字符串文件夹名、字符串主题)抛出MessaginException、GeneralSecurityException、IOException{
props=System.getProperties();
props.setProperty(“mail.store.protocol”、“imaps”);
setProperty(“mail.imaps.host”、“imap.gmail.com”);
props.setProperty(“mail.imaps.port”、“993”);
setProperty(“mail.imaps.ssl.enable”、“true”);
put(“mail.imaps.ssl.socketFactory”,new-mailssocketfactory());
session=session.getInstance(道具);
store=session.getStore();
store.connect(用户名、密码);
folder=store.getFolder(folderName);
文件夹。打开(文件夹。只读);
messages=folder.search(getSearchTerm(主题));
if(消息[0].isMimeType(“multipart/*”)){
多部分多部分=(多部分)消息[0]。getContent();
对于(inti=0;i您使用的是什么邮件服务器
某些邮件服务器没有以任何有用的方式实现“最近”标志,因此邮件可能没有标记为“最近”。请尝试省去“最近”一词,然后查看是否获得更多结果
如果这没有帮助,请添加代码以转储所有消息的标志,然后发布显示所有消息的标志以及搜索请求和响应的
还要注意的是,一些IMAP服务器没有完全或正确地实现SEARCH命令,因此无法处理您正在进行的搜索
最后,请注意,您不需要设置socketFactory属性,除非您以比上面示例代码中更有趣的方式使用MailSSLSocketFactory。imap.gmail.com是邮件服务器。在我删除最近的标记后,它工作正常。非常感谢。