java - 使用 IMAP 协议从 java 读取邮件但缺少一些文件
问题描述
我正在春季启动项目中工作,我需要阅读邮件的详细信息。
首先,我将未读邮件存储到 message[] 数组中,我正在阅读前 50 封邮件,然后再阅读下 50 封邮件,依此类推。
但是当我这样做时,有些邮件丢失了,即在 50 封邮件中,有一些邮件没有被阅读,也没有记录详细信息。
下面是我执行所有这些操作的函数。
请帮助我改进我的代码。
public List<Object> read(){
Properties properties = new Properties();
properties.setProperty("mail.host", "imap.gmail.com");
properties.setProperty("mail.port", "995");
properties.setProperty("mail.transport.protocol", "imaps");
String userName=resourceBundle.getString("mailUserName");
String password=resourceBundle.getString("mailPassword");
Session session = Session.getInstance(properties,
new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
});
try {
Store store = session.getStore("imaps");
store.connect();
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
SearchTerm recentTerm = new FlagTerm(new Flags(Flags.Flag.RECENT), true);
SearchTerm fromTerm = new FromTerm(new InternetAddress(resourceBundle.getString("receiveMailFrom")));
SearchTerm unreadTerm = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
SearchTerm subjectTerm = new SubjectTerm(this.subjectTerm);
SearchTerm subjectAndUnreadTerm = new AndTerm(subjectTerm, unreadTerm);
SearchTerm recentAndFromTerm = new AndTerm(recentTerm, fromTerm);
SearchTerm subjectAndUnreadAndFromTerm = new AndTerm(subjectAndUnreadTerm, fromTerm);
Message messages[] = inbox.search(subjectAndUnreadAndFromTerm);
List<Object> readParams=new ArrayList<>();
if (messages.length<count)
logger.info("Number of mails = " + messages.length);
else
logger.info("Number of mails = " + count);
for (Message message : messages) {
if(mailcount<count) {
Address[] from = message.getFrom();
logger.info("-------------------------------");
logger.info("Date : " + message.getSentDate());
logger.info("From : " + from[0]);
logger.info("Subject: " + message.getSubject());
logger.info("Content :");
fileNames = processMessageBody(message);
logger.info("--------------------------------");
mailcount +=1;
}
else{
break;
}
}
inbox.close(true);
store.close();
if(messages.length==0)
{
readParams.add(0);
return readParams;
}
else {
readParams.add(1);
readParams.add(fileNames);
return readParams;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
解决方案
推荐阅读
- swift - SAP Fiori IOS SDK 离线 OData 过滤器问题
- titanium - 在 MAC 中启动我的应用程序时出现错误消息
- docker - 里面有 minikube 的 docker 镜像
- .htaccess - Symfony 与 web_server_bundle - 如何激活 .htaccess
- asp.net-core - 不能将“Microsoft.AspNet.OData.Routing.ODataRoute”与端点路由一起使用。ASP Net Core 2.2 的异常
- dynamics-crm - 如何在动态 crm 中隐藏业务流程?
- express - 有没有办法知道数据是否正在通过管道传输到快速响应中?
- c# - 如何从匹配条件的行集中获取不同的值
- vue.js - 如何按特定顺序加载 vuejs 组件?
- groovy - getProjectByName(projectname)通过命令行运行时在groovy中抛出空指针异常