java邮件读取

发布时间:2023年12月21日

java读取邮件,读取最近十天内邮件主题含有某些字段如**“申请”未读**邮件

java
import java.util.*;
import javax.mail.*;
import javax.mail.search.*;

public class ReadEmail {

    public static void main(String[] args) {
        String host = "your imap host";
        String user = "your email address";
        String password = "your email password";

        try {
            // 创建Properties对象
            Properties props = new Properties();
            props.setProperty("mail.store.protocol", "imaps");

            // 连接到IMAP服务器
            Session session = Session.getDefaultInstance(props, null);
            Store store = session.getStore();
            store.connect(host, user, password);

            // 获取收件箱
            Folder inbox = store.getFolder("INBOX");
            inbox.open(Folder.READ_ONLY);

            // 创建搜索条件:未读邮件且邮件主题包含“印章”,并且邮件日期在最近十天内
            SearchTerm unreadTerm = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
            SearchTerm subjectTerm = new SubjectTerm("申请");
            Date tenDaysAgo = new Date(System.currentTimeMillis() - 10 * 24 * 60 * 60 * 1000); // 十天前的时间
            SearchTerm dateTerm = new ReceivedDateTerm(ComparisonTerm.LE, tenDaysAgo);
            SearchTerm combinedTerm = new AndTerm(unreadTerm, subjectTerm, dateTerm);

            // 搜索满足条件的邮件
            Message[] messages = inbox.search(combinedTerm);

            // 打印满足条件的邮件信息
            for (Message message : messages) {
                System.out.println("Subject: " + message.getSubject());
                System.out.println("From: " + message.getFrom()[0]);
                System.out.println("Received Date: " + message.getReceivedDate());
                System.out.println("------------------------");
            }

            // 关闭资源
            inbox.close(false);
            store.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码中的"your imap host"、"your email address"和"your email password"替换为你自己的IMAP服务器地址、电子邮件地址和密码。

这个示例使用的是IMAP协议,并且邮件服务器支持搜索功能。不同的邮件服务器可能对搜索条件的支持程度不同,因此实际效果可能会有所不同。

有的版本不支持这种写法:

new AndTerm(unreadTerm, subjectTerm, dateTerm);

但支持传入数组的形式,可以换成这种写法:

List<SearchTerm>list =new ArrayList<SearchTerm>();
SearchTerm unreadTerm = new FlagTerm(new Flags(Flags.Flag.SEEN), false);//未读的邮件
SearchTerm subjectTerm = new SubjectTerm("申请");//根据关键字模糊查询
Date tenDaysAgo = new Date(System.currentTimeMillis() - 10 * 24 * 60 * 60 * 1000); // 十天前的时间
SearchTerm dateTerm = new ReceivedDateTerm(ComparisonTerm.LE, tenDaysAgo);//最近十天内的邮件
list.add(unreadTerm);
list.add(subjectTerm);
list.add(dateTerm);
SearchTerm [] array=list.toArray(new SearchTerm[0]);
SearchTerm searchTerm = new AndTerm(array);

还有创建连接邮件服务器连接时可能连接出错,我们公司的是因为只支持pop3协议,所以我指定了协议,上面的方法改成这个:

Store store = session.getStore("pop3");

如果按照上面的方法有什么运行异常,可私聊我,如果碰到相同问题,定知无不言;

文章来源:https://blog.csdn.net/weixin_43735471/article/details/135129625
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。