加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 22:20:41 所属栏目:百科 来源:网络整理
导读:我使用Exchange Web服务托管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 ew
我使用Exchange Web服务托管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个字节(转发或回复),所以我不知道最后一个动作是什么.

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

我见过其他文章,如this或this,建议使用扩展属性来检查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标头,该标头应该在任何回复或转发的消息上设置,这应该包含回复或转发的消息的因特网消息ID.

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[] { "rn" };
                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);
                        }
                    }
                }

            }
        }

除了在另一个链接中讨论的主题前缀之外,我不知道将区分回复或转发的任何其他礼仪.

干杯狭谷

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读