问题描述
我已经为其配置了ImapMailReciever和setSearchTermStrategy。我正在尝试使用特定条件-ReceivedDate Range从收件箱中提取所有电子邮件,并排除来自特定域的电子邮件。如果邮件具有匹配的地址域,则AddressSearchTerm返回false,因此应排除该邮件本身被提取。以下是相同的代码段-
public class CustomSearchTermStrategy implements SearchTermStrategy {
public SearchTerm generateSearchTerm(Flags flags,Folder folder) {
SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT,new Date("01-Aug-2020"));
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT,new Date("05-Aug-2020"));
SearchTerm term = new AddressSearchTerm("abc.com");
SearchTerm [] termArray = new SearchTerm[]{olderThan,newerThan,term};
return new AndTerm(termArray);
}
private class AddressSearchTerm extends AddressstringTerm {
/**
* Constructor.
*
* @param pattern the address pattern to be compared.
*/
protected AddressSearchTerm(String pattern) {
super(pattern);
}
public boolean match(Message mesg){
try {
Address from[] = mesg.getFrom();
for (int i = 0; i < from.length; i++) {
if (match(from[i])){
return false;
}
}
return true;
} catch (MessagingException e) {
return false;
}
}
}
但是,当我运行该应用程序时,我看到IMAP开始获取所有电子邮件,然后从域abc.com中排除了这些电子邮件。以下是IMAP调试日志-
A5 FETCH 1(信封内部RFC822.SIZE)
- 1个FETCH(信封(“电子邮件详细信息” RFC822.SIZE 123) A5 OK FETCH完成。
因此,当我设置下面的SearchTermStrategy而不使用AddressSearchTerm时。 IMAP会先搜索uid,然后仅获取符合搜索条件的电子邮件,这是预期的搜索方式-
public SearchTerm generateSearchTerm(Flags flags,Folder folder) {
SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT,new Date("01-Aug-2020"));
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT,new Date("05-Aug-2020"));
//SearchTerm term = new AddressSearchTerm(domain);
SearchTerm [] termArray = new SearchTerm[]{olderThan,newerThan};
return new AndTerm(termArray);
}
以下是上述条件的IMAP调试日志- A5从2020年8月5日开始搜索不在2020年8月1日开始于2020年8月1日所有
我也尝试过使用FromStringTerm过滤电子邮件,但这也无法按预期工作。
收件箱中有数十万封电子邮件,因此我想先搜索电子邮件,然后再提取。我该如何设置正确的搜索条件,哪里出问题了?
感谢您的帮助或建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)