Exchange Server邮件拦截方案选型咨询:Mail Flow或Delivery Agent?
Exchange Server邮件拦截工具实现指引
技术方案选型
- Transport Agents:尽管文档看起来老旧,但它是Exchange Server(2013-2019)官方支持的服务器端邮件处理扩展方案,能在邮件传输的提交、路由、传递等多个核心阶段介入,完全满足你读取邮件内容、提取统计数据(邮件头、附件数量等)、添加自定义头的需求,是最匹配的选择。
- Delivery Agents & Delivery Agent Connectors:仅用于对接外部邮件投递系统,不适合通用邮件拦截与内容处理场景,排除。
- Mail Flow & Transport:这是Exchange邮件传输的基础架构概念,并非具体开发接口,你需要基于该框架选择Transport Agents作为实现载体。
实现方式说明
方式一:C#编写Transport Agent程序集
- 开发:使用C#创建类库项目,引用Exchange自带的
Microsoft.Exchange.Data.Transport等相关程序集,继承RoutingAgent类并重写对应邮件处理方法(如OnSubmittedMessage拦截待投递邮件、OnDeliveredMessage拦截已投递邮件)。 - 部署:编译生成.dll文件后,通过Exchange管理命令行(EMS)执行注册命令,将Agent部署到Exchange服务器并启用,无需在Exchange管理中心的“邮件流->连接器”配置(连接器用于跨系统邮件路由,与Agent无关)。
- 功能实现:在处理方法中可直接获取邮件对象,读取邮件头、枚举附件统计数量,添加自定义邮件头,同时将数据写入自定义数据库。
方式二:邮件流规则+Webhook托管服务
- 配置:在Exchange管理中心创建邮件流规则,将所有收发邮件转发到你的托管服务Webhook地址。
- 处理:在Webhook服务中接收邮件,完成内容读取、统计数据存储,添加自定义头后再将邮件重新投递到目标地址。
- 局限:拦截时机不如Transport Agents灵活,自定义头需在二次投递时添加,部分邮件元数据可能在转发过程中丢失。
参考示例教程核心内容(翻译)
你找到的Exchange Server API示例教程,核心是指导创建基础Transport Agent,步骤如下:
- 创建C#类库项目,引用Exchange服务器上的
Microsoft.Exchange.Data.Transport程序集 - 实现
RoutingAgent类,重写OnSubmittedMessage方法以拦截提交阶段的邮件 - 在方法内通过
MailItem对象获取邮件头、附件信息,调用MailItem.Headers.Add添加自定义头 - 编译程序集,通过EMS命令
Install-TransportAgent注册Agent,再用Enable-TransportAgent启用 - 重启Exchange传输服务,测试邮件处理效果
内容的提问来源于stack exchange,提问作者user2058413
相关产品推荐
相关产品推荐

