【问题标题】:Filter emails by domain using javamail使用 javamail 按域过滤电子邮件
【发布时间】:2018-09-06 21:47:15
【问题描述】:

我正在使用javamail 下载电子邮件,但现在我需要按域过滤一些电子邮件地址。

我尝试使用FromStringTerm,但我不知道过滤它的正确模式。

edit 1jmehrens 部分解决了我的问题。当我从文件夹中收到消息时,我想进行过滤,例如:

            Store store = session.getStore("imap");
            store.connect(configc.host, configc.email, configc.pass);
            Folder folderInbox = store.getFolder("INBOX");
            folderInbox.open(Folder.READ_ONLY);

            Message[] arrayMessages1 = folderInbox.search(??);

此时我如何按域进行过滤?

【问题讨论】:

    标签: java jakarta-mail


    【解决方案1】:

    FromStringTerm 继承了javax.mail.search.SearchTerm 中描述的行为:

    这个类实现了字符串的匹配方法。当前实现仅提供子字符串匹配。我们可以添加比较(如 strcmp ...)。

    所以没有模式,因为它执行开箱即用的子字符串匹配。

    这是一个测试用例:

    public class DomainMatch {
    
        public static void main(String[] args) throws Exception {
            MimeMessage msg = new MimeMessage((Session) null);
            msg.addFrom(InternetAddress.parse("foo@bar.org"));
            msg.saveChanges();
    
            System.out.println(new FromStringTerm("@bar.org").match(msg));
            System.out.println(new FromStringTerm("@spam.org").match(msg));
        }
    }
    

    使用javax.mail.Folder::search 文档,您可以编写如下内容:

    Store store = session.getStore("imap");
    store.connect(configc.host, configc.email, configc.pass);
    Folder folderInbox = store.getFolder("INBOX");
    folderInbox.open(Folder.READ_ONLY);
    
    Message[] onlyBarOrg = folderInbox.search(new FromStringTerm("@bar.org"));
    

    【讨论】:

    • 感谢 jmehrens 的回复。我更新了我的问题,详细说明了我需要做什么。
    猜你喜欢
    • 1970-01-01
    • 2012-04-19
    • 2020-10-02
    • 1970-01-01
    • 2018-12-18
    • 2017-12-18
    • 1970-01-01
    • 2021-10-16
    相关资源
    最近更新 更多