我有一个 .NET 应用程序,它会按计划轮询 Exchange 电子邮件邮箱中的新消息。当在电子邮件邮箱中发现新消息时,会进行进一步处理。我在邮箱中收到自动回复消息时遇到了处理问题[例如自动回复规则或外出消息]。
我需要一个 C# 解决方案来确定 Exchange 邮件项目是否是自动回复邮件。邮件项上是否有一个属性指示该消息是否为自动回复消息?
寻找头文件的存在:
X-Auto-Response-Suppress
这是 Exchange 添加到自动消息的标志,以防止它们触发其他自动消息。这听起来像你的确切用例。可以设置特定的标志,但就我而言,无论设置了哪些标志,我都没有发送回复。
自动响应信息构成标题的一部分,有时还构成主题和正文。这完全取决于进行自动响应的服务器。
我个人使用第 3 方组件来协助解析电子邮件。它被称为ListNanny。
它有一个解析器引擎和一个定义文件,并且可以协助处理一些额外的 NDR 类型,例如硬弹跳和软弹跳、ChallengeVerification、DnsError 电子邮件等。
如果我使用 ListNanny 收到“未知”类型的邮件,我会认为这是一封正确的电子邮件
希望这可以帮助
编辑:
评论后。我的另一个建议是生成几种不同类型的自动响应消息。
从那里您可以手动查看电子邮件的标题,找到任何可能表明它是自动回复消息(不会出现在普通消息中)的条目,然后编写您自己的电子邮件解析器来判断电子邮件是否包含这些 Auto回复“签名”,然后将其标记为这样。
我只能告诉你,当你开始的时候,你很可能会收到很多 False-Positives 或 Positive-False 的电子邮件,但一段时间后情况会好转,在你处理更多的电子邮件并完善你的签名之后.
抱歉,我无法为您提供代码示例或其他想法提供更多帮助。
在为这个问题挣扎了一段时间后,我决定只使用最简单的方法。
通过使用可用于 Exchange 2007 的 Exchange Web 服务 (exchange.asmx),我决定在继续处理逻辑之前检查每个邮件项目的主题行以查看它是否包含“外出”。我处理的所有邮件都是包含“外出”主题行的自动回复邮件。
我敢肯定,我将来会遇到没有“外出”的自动回复消息的其他用例,我将不得不考虑这些用例。那时,我将修改代码以根据可能的主题行数组检查主题行,或者继续在邮件项上搜索一些指示自动回复消息的附加属性。
我很确定附加属性是邮件标题中的“返回路径:”值,但我还没有找到获取该属性的简单方法。据我所知,如果“返回路径”具有“<>”值,则它是一条自动回复消息,否则它将具有有效的电子邮件地址。
看来,如果您使用的是 Exchange EWS 托管 API,则可以检查 Exchange“项目”的 ItemClass。这表明它是否是任务、事件、文档、电子邮件等。
它还指示它是 OofTemplate 还是 NDR(反弹)。这里列出了一些类:
https://docs.microsoft.com/en-us/office/vba/outlook/Concepts/Forms/item-types-and-message-classes
所以基本的想法是检查......
if(item.ItemClass != "IPM.Note")
...那么它不是电子邮件和/或它是自动回复