java邮件读取

本文介绍如何使用Java通过IMAP协议读取电子邮件,搜索最近十天内主题包含特定关键词(如申请)的未读邮件,并提供代码示例和可能遇到的问题解决方法。
摘要由CSDN通过智能技术生成

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");

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

见未见过的风景

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值