java - Spring 集成邮件在获取电子邮件后设置标志“已标记”。有没有办法阻止它这样做?
问题描述
我正在尝试根据来自、主题和正文等 SearchTerms 获取电子邮件,并且我已经实现SearchTermStrategy
了将 java 邮件SearchTerm[]
作为构造函数参数的接口,并且我还扩展ImapMailReceiver
了类并覆盖了它的searchForNewMessages()
. 这是代码
public class SearchTermStrategyImpl implements SearchTermStrategy {
private final SearchTerm[] searchTerms;
public SearchTermStrategyImpl(SearchTerm[] searchTerms) {
this.searchTerms = searchTerms;
}
@Override
public SearchTerm generateSearchTerm(Flags supportedFlags, Folder folder) {
SearchTerm searchTerm = null;
for (int i = 0; i < searchTerms.length; i++) {
if (i == 0) {
searchTerm = searchTerms[i];
} else {
searchTerm = new AndTerm(searchTerm, searchTerms[i]);
}
}
return searchTerm;
}
}
ImapMailReceiver 的重写方法
@Override
protected Message[] searchForNewMessages() throws MessagingException {
Message[] messages = null;
Folder folder = getFolder();
super.setSearchTermStrategy(searchTermStrategy);
SearchTerm searchTerm = searchTermStrategy.generateSearchTerm(null, null);
if (folder.isOpen()) {
messages = searchTerm==null ? folder.getMessages() : folder.search(searchTerm);
} else {
throw new ImapException("Folder is closed");
}
return messages.length > 0 ? messages : new Message[0];
}
我也将SimpleContent
,ShouldMarkMessagesAsRead
和AutoCloseFolder
值设置为 false 的ImapMailReceiver
。
最后,我在有效负载中收到消息,该消息具有附加标志“已标记”,这是不正确的。无论如何要保留电子邮件标志吗?
我已经尝试在每条消息上将 Flag.Flagged 设置为 false,但这有两种错误
- 如果用户标记了一些重要的电子邮件。
- 通过遍历所有电子邮件并将 Flagged 设置为 false ,这将像上面那样对性能造成很大影响和错误。
SelectorExpression
我认为,在未指定的情况下,可以减少获取电子邮件后的额外处理(避免调用searchAndFilterMessages()
方法)
解决方案
Flags.Flag.FLAGGED
AbstractMailReceiver.setMessageFlags()
如果服务器不同时支持Flags.Flag.RECENT
和 ,则设置 (in ) Flags.Flag.USER
。
(这些标志用于默认搜索词)。
看起来您应该能够覆盖setAdditionalFlags()
和使用message.getFlags().removeFlag(Flags.Flag.FLAGGED)
(在调用super.SetAdditionalFlags()
which sets之后Flags.Flag.SEEN
)。
推荐阅读
- javascript - React 16.13:无法从子事件处理程序中不同组件的函数体内更新组件
- php - 无法检索数据 - Laravel 6
- proxy - socat 错误 - 未知选项“代理端口:8080”
- angular - Angular 9 ReactiveFormsModule - 电子邮件验证
- android - android屏幕键盘按键坐标
- python - 如何仅聚合python / pandas中列的前后值中的值
- angular - 如何在不停止排队调用的情况下使异步调用并行
- sql - postgreSQL:通过匹配行数据删除
- android - Android kotlin - 添加到数组
/ JSONArray 导致 ArrayIndexOutOfBoundsException - javascript - 根据图像分辨率和用户大小输入计算字体大小