我有一个.NET应用程序,定期轮询 Exchange 邮件邮箱以获取新邮件。当在邮箱中发现新邮件时,将进行进一步处理。然而,当邮箱收到自动回复消息(例如自动回复规则或 Out of Office 消息)时,处理会遇到问题。
我需要一个 C# 解决方案来确定 Exchange 邮件项是否为自动回复消息。邮件项中是否有属性指示该消息是自动响应消息?
查找标题是否存在:
X-Auto-Response-Suppress
是的,有一个属性,但它被称为InternetMessageHeaders
,而且不仅仅是一个,因为我们有多个电子邮件交换服务器,它们都遵循自己的标准。
以下是可以检查的标题列表:
Auto-Submitted: auto-replied
X-Auto-Response-Suppress:all
Precedence: auto_reply
X-Autoreply: yes
Auto-Submitted: auto-generated
自动响应信息是邮件头的一部分,有时也包括主题和正文。这完全取决于发送自动响应的服务器。
我个人使用第三方组件ListNanny来协助解析电子邮件。
它有一个解析引擎和一个定义文件,并且可以协助处理其他类型的NDR,例如硬反弹、软反弹、挑战验证、DNS错误电子邮件等等。
如果使用ListNanny返回一个“未知”类型,那么我就假设它是一个正确的电子邮件。
希望这能帮到你。
编辑:
在评论后,我的另一个建议是生成几种不同类型的自动响应消息。
然后您手动查看电子邮件的标头,找到任何可能表明它是自动响应消息的条目(这些条目不会出现在普通消息中),然后编写自己的电子邮件解析器,以确定电子邮件是否包含任何这些自动响应的“签名”,然后将其标记为此类电子邮件。
我只能告诉你当你开始时,你很可能会有很多错判的电子邮件,但是一段时间后这种情况会变得更好,在处理更多电子邮件并完善您的签名后就会有所改善。在苦苦挣扎了一段时间后,我决定采用最简单的方法。
通过使用可用于Exchange 2007的Exchange Web服务(exchange.asmx),我决定仅检查每个邮件项的主题行是否包含“Out of Office”,然后再继续处理逻辑。我处理的所有消息都是包含“Out of Office”主题行的自动回复消息。
我相信将来还会遇到其他不包含“Out of Office”的自动回复消息的用例,我将不得不修改代码以检查主题行是否与可能的主题行数组匹配,或者继续搜索邮件项上的其他属性以指示自动回复消息。
我相当确定附加属性是邮件项头中的“Return-Path:”值,但我还没有找到获取该属性的简单方法。据我所知,如果“Return-Path”具有“<>”值,则它是自动回复消息,否则它将具有有效的电子邮件地址。
如果您正在使用Exchange EWS托管API,可以检查Exchange“项目”的ItemClass。这表示它是任务、事件、文档、电子邮件等。
它还指示它是否为OofTemplate或NDR(退回)。这里列出了一些类:
https://learn.microsoft.com/en-us/office/vba/outlook/Concepts/Forms/item-types-and-message-classes
所以基本思路是检查...
if(item.ItemClass != "IPM.Note")
如果不是电子邮件,或者是自动回复,则不是电子邮件