java邮件读取

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!要读取当天已邮件,可以使用 Java Mail API 中的 IMAP 协议来实现。以下是示例代码: ```java import javax.mail.*; import javax.mail.internet.*; import java.util.*; public class ReadTodayReadEmails { public static void main(String[] args) throws Exception { // 设置邮件服务器参数 String host = "imap.gmail.com"; String username = "your_username"; String password = "your_password"; // 获取当天日期 Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); String today = sdf.format(cal.getTime()); // 连接到邮件服务器 Properties props = new Properties(); props.setProperty("mail.store.protocol", "imaps"); props.setProperty("mail.imaps.host", host); props.setProperty("mail.imaps.port", "993"); props.setProperty("mail.imaps.ssl.enable", "true"); Session session = Session.getDefaultInstance(props); Store store = session.getStore(); store.connect(username, password); // 打开收件箱 Folder inbox = store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); // 获取当天已邮件 Message[] messages = inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), true)); List<Message> todayReadMessages = new ArrayList<Message>(); for (Message message : messages) { Date date = message.getSentDate(); String sentDate = sdf.format(date); if (sentDate.equals(today)) { todayReadMessages.add(message); } } // 输出邮件内容 for (Message message : todayReadMessages) { System.out.println("Subject: " + message.getSubject()); System.out.println("From: " + message.getFrom()[0]); System.out.println("To: " + message.getAllRecipients()[0]); System.out.println("Date: " + message.getSentDate()); System.out.println("Content: " + message.getContent().toString()); } // 关闭连接 inbox.close(false); store.close(); } } ``` 请将 `your_username` 和 `your_password` 替换为您的实际用户名和密码。另外,如果您使用的是其他邮件服务器,请修改 `host`、`mail.imaps.host` 和 `mail.imaps.port` 参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

见未见过的风景

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

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

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

打赏作者

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

抵扣说明:

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

余额充值