如何确定 Exchange 邮件项目是不是为自动回复邮件?

Posted

技术标签:

【中文标题】如何确定 Exchange 邮件项目是不是为自动回复邮件?【英文标题】:How do I determine if an Exchange mail item is an auto reply message?如何确定 Exchange 邮件项目是否为自动回复邮件? 【发布时间】:2011-03-09 22:34:24 【问题描述】:

我有一个 .NET 应用程序,它会定期轮询 Exchange 电子邮件邮箱中的新消息。当在电子邮件邮箱中发现新消息时,会进行进一步处理。我在邮箱中收到自动回复消息时遇到了处理问题[例如自动回复规则,或外出消息]。

我需要一个 C# 解决方案来确定 Exchange 邮件项目是否是自动回复邮件。邮件项上是否有一个属性指示该消息是否为自动回复消息?

【问题讨论】:

【参考方案1】:

自动响应信息构成标题的一部分,有时还构成主题和正文。这完全取决于进行自动响应的服务器。

我个人使用第 3 方组件来协助解析电子邮件。它被称为ListNanny。

它有一个解析器引擎和一个定义文件,并且可以协助处理一些额外的 NDR 类型,例如硬和软退回、ChallengeVerification、DnsError 电子邮件等。

如果我使用 ListNanny 收到“未知”类型的邮件,我会认为这是一封正确的电子邮件

希望对你有帮助

编辑:

评论之后。我的另一个建议是生成几种不同类型的自动响应消息。

从那里您可以手动查看电子邮件的标题,找到任何可能表明它是自动回复消息的条目(不会出现在普通消息中),然后编写您自己的电子邮件解析器来判断电子邮件是否包含任何那些自动响应的“签名”,然后将其标记为这样。

我只能告诉你,当你刚开始的时候,你很可能会收到很多 False-Positives 或 Positive-False 的电子邮件,但一段时间后这种情况会好转,并且在你处理了更多的电子邮件和完善您的签名。

很抱歉,我无法为您提供代码示例或其他想法提供更多帮助。

【讨论】:

我希望不使用 3rd 方组件来完成这项工作。购买第三方工具只是为了检查消息是否是自动回复似乎没有必要。【参考方案2】:

在解决这个问题一段时间后,我决定只使用最简单的方法。

通过使用可用于 Exchange 2007 的 Exchange Web 服务 (exchange.asmx),我决定在继续处理逻辑之前检查每个邮件项目的主题行以查看它是否包含“外出”。我处理的所有邮件都是包含“外出”主题行的自动回复邮件。

我确信我会遇到其他没有“不在办公室”的自动回复消息的用例,我将来必须考虑这些用例。那时,我将修改代码以根据可能的主题行数组检查主题行,或者继续在邮件项上搜索一些指示自动回复消息的附加属性。

我很确定附加属性是邮件标题中的“Return-Path:”值,但我还没有找到获取该属性的简单方法。据我所知,如果“Return-Path”有一个“”值,它是一条自动回复消息,否则它会有一个有效的电子邮件地址。

【讨论】:

【参考方案3】:

寻找头部是否存在:

X-Auto-Response-Suppress

这是 Exchange 为自动消息添加的标志,以防止它们触发其他自动消息。这听起来像你的确切用例。有specific flags that can be set,但就我而言,无论设置了哪些标志,我都没有发送回复。

【讨论】:

【参考方案4】:

如果您使用的是 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")

...那么它不是电子邮件和/或它是自动回复

【讨论】:

以上是关于如何确定 Exchange 邮件项目是不是为自动回复邮件?的主要内容,如果未能解决你的问题,请参考以下文章

exchange开启邮件自动转发及回复功能

如何在Exchange上删除邮件

Exchange2003如何自动删除超过7天的邮件

如何从Exchange Server上删除邮件

Exchange Web 服务 (EWS) - 如何识别会议参与者是邮件组还是个人参与者

outlook如何收取exchange服务器邮件?