gpt4 book ai didi

c# - EWS - 确定电子邮件是回复还是已转发

转载 作者:行者123 更新时间:2023-11-30 12:42:46 27 4
gpt4 key购买 nike

我正在使用 Exchange Web Services Managed API 2.2 来监控用户收件箱,并且需要确定电子邮件是新邮件、回复邮件还是转发邮件。

我看过关于 SO 的各种文章,例如 how to notice if a mail is a forwarded mail?Is there a way to determine if a email is a reply/response using ews c#?这两者在他们的特定情况下都有帮助,但我仍然无法弄清楚如何区分回复和转发的项目。

在第一篇文章中,每次(转发或回复)都会额外添加5个字节,所以我不知道最后一个 Action 是什么。

第二篇文章建议使用 InReplyTo,但是当我检查转发电子邮件的属性时,它包含原始发件人电子邮件地址(非空)。

我看过其他文章如thisthis建议使用扩展属性来检查 PR_ICON_INDEX、PR_LAST_VERB_EXECUTED 和 PR_LAST_VERB_EXECUTION_TIME 中的值。

我的代码如下所示,但从未为 lastVerbExecuted

返回值
var lastVerbExecutedProperty = new ExtendedPropertyDefinition(4225, MapiPropertyType.Integer);

var response = service.BindToItems(newMails, new PropertySet(BasePropertySet.IdOnly, lastVerbExecutedProperty));
var items = response.Select(itemResponse => itemResponse.Item);

foreach (var item in items)
{
object lastVerb;

if (item.TryGetProperty(lastVerbExecutedProperty, out lastVerb))
{
// do something
}
}

最佳答案

PR_ICON_INDEX、PR_LAST_VERB_EXECUTED 和 PR_LAST_VERB_EXECUTION_TIME 只会告诉您收件人是否对收件箱中的邮件进行了操作。例如,如果用户在他们的收件箱中回复或转发了一条消息,那么这些属性将在他们的收件箱中的消息上设置。在响应或转发的消息中,不会设置这些属性。我建议您使用 In-Reply-To Transport header ,该 header 应设置在任何回复或转发的消息上,这应包含已回复或转发的消息的 Internet messageid,例如。

        FindItemsResults<Item> fiRs = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
PropertySet fiRsPropSet = new PropertySet(BasePropertySet.FirstClassProperties);
ExtendedPropertyDefinition PR_TRANSPORT_MESSAGE_HEADERS = new ExtendedPropertyDefinition(0x007D, MapiPropertyType.String);
fiRsPropSet.Add(PR_TRANSPORT_MESSAGE_HEADERS);
service.LoadPropertiesForItems(fiRs.Items, fiRsPropSet);
foreach (Item itItem in fiRs)
{
Object TransportHeaderValue = null;
if(itItem.TryGetProperty(PR_TRANSPORT_MESSAGE_HEADERS,out TransportHeaderValue)) {
string[] stringSeparators = new string[] { "\r\n" };
String[] taArray = TransportHeaderValue.ToString().Split(stringSeparators, StringSplitOptions.None);
for (Int32 txCount = 0; txCount < taArray.Length; txCount++)
{
if (taArray[txCount].Length > 12)
{
if (taArray[txCount].Substring(0, 12).ToLower() == "in-reply-to:")
{
String OriginalId = taArray[txCount].Substring(13);
Console.WriteLine(OriginalId);
}
}
}

}
}

除了在另一个链接中讨论的主题前缀外,我不知道有任何其他属性可以区分回复或转发。

干杯格伦

关于c# - EWS - 确定电子邮件是回复还是已转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32718758/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com