ews

规则表设计 对应了easy-rule (下表不再使用)
rule_id rule_name
(规则名) rule_desc
(规则简介) rule_conditions
(规则条件,送入引擎fire用的fact的key) rule_filters
priority
(优先级) action_type
(动作类型) actions
(动作集合) delete_flag
(删除键) rule_type
(规则判定的类型,如email,text,等枚举值)
1 邮件分拣1 规则介绍1 {"subject":"系统访问操作信息","senderAddress":"htffund.com"} 'ha','ia','huac' 1 D 下载链接 0 email
2 邮件分拣2 规则介绍2 {"subject":"社保909","senderAddress":"htffund.com"} 'in' 2 C 下载链接,拷贝链接 1 other
rule_filters: (规则过滤,对应microsoft中该email有无附件,是否设定了时间,等等进行邮件本体的过滤,这里也可以对应其它枚举,来送入filterHandler等进行boolean的返回)

注:所有的表中需要再设定create_time,update_time,create_by,update_by

规则表设计 对应了ews_rule
rule_id display_name
(展示名称) rule_desc
(规则介绍) rule_level
(规则等级) priority
(优先级)
在topic_rule关联表时设定 rule_type(对应的是ews的规则类型) is_enabled
(是否启用) is_not_supported
(是否远方邮箱不支持) is_in_error
(是否处于异常) conditions
(条件,包含各种key,value) actions
(动作,包含各种key,value) exceptions
(类似conditions,暂不使用) item_action_type
(动作类型) item_actions
(邮件实体的操作,下载到内存中后) delete_flag
(删除标识)
{'containsSubjectStrings':['带附件','htf']} {'moveToFolder':'attach-un-download'} D(下载) {'downloadPath':'/home/email/attach'}

											DC(下载并拷贝)	{'downloadPath':'/home/email/attach','copyPath':'/home/email/backup'}		

一个规则引擎
1.easy-rule,用于将邮件拿到后,做为获取下载附件路径,但整体也可以通过多建立邮箱内不同文件夹来区分,使用度较低
2.ews-rule,用于将邮件首先在邮箱端根据规则区分,并移动到指定目录(结合了easy-rule的相关字段)
item_action_type: 动作类型, 如D download, DC download and copy

rule_type: 指的是ews_rule的规则类型:

rule_topic : 规则主题,一个邮箱可对应多个,但不应冲突,如下载和下载并拷贝就互为冲突,而 下载主题和删除某些邮件主题则不冲突
规则主题一般会对不同的收件箱子目录进行处理,互不交集
rule_level: 每条规则含规则等级,在收件主题中关联到的多个规则,其中规则等级不能重复
priority与rule_level类似,权重在rule表中是一整个规则的权重设置,比较难判定这个规则的先后执行顺序,而参照ews_topic_rule_relation
的更改,其实也应该在设定邮件topic时,实时去指定选中规则的执行先后顺序,而先后,必然根据priority,但是否是可以放到一起做为同一主题的规则们,则需要根据rule_level(或rule_type)进行区分,即是说,priority是指定的,而顺序的操作也要参照可行性,而rule_level(或rule_type)是预设置的.

单个主题, (单个邮件,多个邮件),
多个邮箱

一个邮箱对应一条收件主题,而一条收件主题中包含多个不重复业务的规则(其中不冲突创建文件夹,不冲突判定conditions和actions等)

通过配置多个邮件,设定到如EmailConfigEntity,对多个邮件配置进行管理.
多个收件主题,其中主题范围大,内可包含该收件对邮件的哪些过滤条件,以及多个满足什么规则条件.

原easy-rule使用的有如when.then方式,当怎么怎么样,则执行什么什么

接收邮件时如果先进行邮件筛选?

ExchangeService
交换service,通过设定email配置信息获取email相关数据

EmailMessage
邮件主体信息,包含邮件附件

WellKnownFolderName
邮件系统中众所周知的文件夹名称

Folder
代表一个通用文件夹

java读取exchange服务器,以及遇到的坑
https://blog.csdn.net/qq_37497275/article/details/102606183

使用 EWS(Exchange Web Service)协议读取邮件、发送邮件
https://www.bbsmax.com/A/VGzll8Wwzb/

通知类型:
https://docs.microsoft.com/zh-cn/exchange/client-developer/exchange-web-services/notification-subscriptions-mailbox-events-and-ews-in-exchange

通知类型:
https://docs.microsoft.com/zh-cn/exchange/client-developer/exchange-web-services/notification-subscriptions-mailbox-events-and-ews-in-exchange#how-do-ews-notifications-work
流式订阅
https://docs.microsoft.com/zh-cn/exchange/client-developer/exchange-web-services/how-to-stream-notifications-about-mailbox-events-by-using-ews-in-exchange

EWS API:

具体解析notifications

Creating a Folder
Folder folder = new Folder(service);
folder.setDisplayName("some-attachment-fixed-630");
//creates the folder as a child of the Inbox folder.
folder.save(WellKnownFolderName.Inbox);

ews-java-api doc:
https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide

过滤根据subject:
https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide#find-the-first-10-messages-in-the-inbox-that-have-a-subject-that-contains-the-words-ews-or-api-order-by-date-received-and-only-return-the-subject-and-datetimereceived-properties

event notifications:
EWS allows client applications to subscribe to event notifications. This makes it possible to determine what events occurred on a specific folder since a specific point in time (for example, what items were created, modified, moved, or deleted).
https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide#notifications

BeginSubscribeToStreamingNotifications stream方式订阅
https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide#beginsubscribetostreamingnotifications

CreateInboxRules 根据rule移动item
https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide#createinboxrules

每50个item递增获取
https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide#retrieve-all-the-items-in-the-inbox-by-groups-of-50-items

创建文件夹
https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide#creating-a-folder

内容扩展 (好像可打tag)
https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide#extended-properties

通过itemId获取EmailMessage实例
https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide#binding-to-an-existing-item

watermark
https://docs.microsoft.com/zh-cn/archive/blogs/exchangedev/transitioning-to-exchange-web-services-notifications
process1:

依赖包中的Rule拆解:

  1. rule改为 依赖包中的rule rule.getConditions()获取匹配用到的字符串
  2. RuleActions中包含设定邮件已读,copy文件到邮箱其它目录,停止其它rule判定等

WellKnownFolderName.MsgFolderRoot 邮箱根目录

Rule包含RuleId,RuleId

事件提示:
多种的notifications
这里使用时,通过开启与关闭间加入Thread.sleep(10000),并测试发送新邮件,
其中通过stream的
PUSH的订阅模式暂时无法获取收到邮件信息

通过StreamConnection相关可以获取,开启后30分钟内有效.
subscribeToPullNotifications 1-1440 24小时

通过两种方式监听最新邮件
1.长时间,间隔长,不频繁 PullSubcription 适用
2.短时间,间隔短,开关流 StreamSubcription

邮件文件夹:
文件夹创建后返回的id字符串需要保存,最长的如下:
AQMkADAwATM0MDAAMS0zNjFkLTY1MWEtMDACLTAwCgAuAAADgRcCAFohSUCq+fGuJ055HwEAmSTpLTMl3E+ND/s/c1xWVQAAAWrq6wAAAA==
AQMkADAwATM0MDAAMS0zNjFkLTY1MWEtMDACLTAwCgAuAAADgRcCAFohSUCq+fGuJ055HwEAmSTpLTMl3E+ND/s/c1xWVQAAAWrq7QAAAA==
每次创建即使中文名称一样,id也会不同.
mail_folders
folder_id belong_email_id (关联email表) folder_name_code delete_flag
{'folderIds':['AQMkADAwATM0MDAAMS0zNjFkLTY1MWEtMDACLTAwCgAuAAADgRcCAFohSUCq+fGuJ055HwEAmSTpLTMl3E+ND/s/c1xWVQAAAWrq6wAAAA==']} 1 {'folderNames':['attach-un-download']} 0

当邮件Rule判定邮件后,将文件分发到规定的Folder,即使用以上id
ews_mail_folders
该表应该进行folder_code与folder_name的唯一约束,不过在现在创建时还没有更改到与ews_rule_folder_relation的关联
同一个rule只能对应一个folderName
ews_folder_id (主键) folder_id folder_code folder_name belong_rule_id delete_flag
1 332a un-download 未下载 11 0
2 344b al-download 已下载 11 0
3 mm0 delete-junk 删除垃圾 22 0
4 mm2 move-content 观览邮件 22 0
5 332a un-download 未下载 33 (有的规则可能也会对应同样的之前的文件夹,但肯定不属于同一个主题中) 0
规则和文件夹的对应
ews_rule_folder_relation
relation_id rule_id ews_folder_id delete_flag mail_id
1 11 1
2 11 2
3 22 3
4 22 4
5 33 1
6
这里33id的rule会对应再次的ews_folder_id 1, 可能两个rule_level都为1 , 而不属于同一主题
mail_id 区别是哪个邮件的, 如果两个邮件同时使用规则1以及文件夹1 则无法区分

topic_config:
1.根据给定的topic下的子规则主键来组合为一种topic_config串 (ruleId为key,ruleType为value)
{'xxxkkkkkjdjj'

上一篇:安装kafka


下一篇:RabbitMq-topic通配符模式(五)