即使设置了SearchTermStrategy

问题描述

我已经为其配置了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日所有

  • 搜索96 97 98 99 100 101 102 103 ..... A5 OK搜索已完成。

我也尝试过使用FromStringTerm过滤电子邮件,但这也无法按预期工作。

收件箱中有数十万封电子邮件,因此我想先搜索电子邮件,然后再提取。我该如何设置正确的搜索条件,哪里出问题了?

感谢您的帮助或建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)