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");
如果按照上面的方法有什么运行异常,可私聊我,如果碰到相同问题,定知无不言;