php – 如何通过对话对各个电子邮件进行分组,以便我确定(100%)
题
在使用Exchange WebServices API时,如何通过对话对各个电子邮件进行分组,以便我确定(100%)一封电子邮件与另一封电子邮件在同一个对话中? 个人意思是:我应该能够一次下载1封电子邮件,因为当发送延迟回复时(比如上个月回复电子邮件),我不想批量下载整个会话再次,但只有一封电子邮件能够将其存储在我自己的数据库中. 上下文 我正在开发一个项目,我需要将所有新鲜的电子邮件放在MySQL数据库中,以便我们可以从CRM应用程序中添加额外的元数据.现在我正在使用基于XML的Exchange WebServices API进行一些原型设计,以便我知道哪些数据可用以及它们是什么样的.我在PHP中这样做(也是我们的CRM内置的语言). 问题 运行简单的XML请求(见下文)时,我会收到来自inbox / sentitems文件夹的一些电子邮件.由于我知道我与同事进行了对话以测试ConversationIndex,因此我发现ConversationIndex似乎并不像我预期的那样是一个索引.我希望它在所有电子邮件中都是平等的,这样我就可以轻松地将一个对话组合在一起. 但这似乎不是真的.因为当我将我的收件箱和snetitems(一个对话)的ConversationIndexs放在一起时,我得到以下结果:( – > sentitem,< - inbox) 正如您所看到的,每个电子邮件的ConversationIndex更改除了前30个字符.通过查阅this question的答案我发现的另一件事是我应该使用BitConverter并修改ConverationIndex,但那是C#.我也找不到这方面的PHP解决方案. 另外,我在EWS文档中找不到关于此主题的任何信息(例如:http://msdn.microsoft.com/en-us/library/ms528174(v=exchg.10).aspx). 可能的选择 我在Exchange服务器的XML响应中看到了一个References键,但使用这些InternetMessageId确定电子邮件所在的对话将成为一个真正的地狱. 我注意到的另一件事是ConversationId(http://msdn.microsoft.com/en-us/library/ff387041%28v=office.12%29.aspx),但这似乎不是我想要的. XML请求,仅供参考 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"> <soap:Body> <FindItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" Traversal="Shallow"> <ItemShape> <t:BaseShape>AllProperties</t:BaseShape> </ItemShape> <IndexedPageItemView MaxEntriesReturned="5" Offset="0" BasePoint="Beginning" /> <ParentFolderIds> <t:DistinguishedFolderId Id="inbox OR sentitems"/> </ParentFolderIds> </FindItem> </soap:Body> </soap:Envelope> 更新1 看起来我必须使用ConversationId而不是索引.虽然我目前正在使用Exchange 2007,但我们很快就会升级到2013年.有人可以确认我必须使用ConversationId吗? 解决方法
Jelmer-
我最近在MSDN上写了How to: Work with conversations by using EWS in Exchange文章.在Exchange 2013中引入的GetConversationItems EWS操作是您要用于检索特定对话中的所有内容的操作. GetConversationItems使用ConversationId元素,这在Exchange 2007中不存在.ConversationTopic和ConversationIndex在Exchange 2007中存在 – 我假设你可以使用另一个操作来查找具有特定ConversationTopic的所有项目,但我没有必要这样做那.如果您需要有关该方法的帮助,请告诉我. ConversationThread是您在上面标识的值(Ac9IKUBx8yX3vSXYQSWcb8ggCfC7FQ),在第一条消息上,每当项目被响应,转发等时,ConversationIndex就会递增. 从article:“Exchange应用相同的ConversationTopic值来回复第一条消息,然后更新ConversationIndex值以表示消息相对于原始消息的位置.如果电子邮件主题的主题发生更改,Exchange将应用新的ConversationTopic值,新的ConversationIndex值为新会话.“ 我注意到您在帖子中称为EWS文档的内容实际上是CDO文档. Exchange 2013的EWS参考内容位于:http://msdn.microsoft.com/en-us/library/bb204119(v=exchg.150).aspx.Exchange 2007的EWS参考内容(如果要进行比较)位于:http://msdn.microsoft.com/en-us/library/bb204119(v=exchg.80).aspx. 希望这有帮助,如果我确实回答了你的问题,请将帖子标记为已回答. 谢谢, 在3/27更新,以回答有关ConversationId的其他问题: 我只是玩这个以确定,如果主题被更改,ConversationId确实会改变,但只要消息被转发并回复,它就会保持不变.我原来的ConversationId是: <ConversationId Id="AAQkADI2MDY4MjQzLWQ1YzQtNGZkNi1iZmE4LTRjZmZmNGEyZjQ0YwAQAJJCqNI7ZfhJmIh7j2kgJvk=" /> <ConversationTopic>Original</ConversationTopic> 但在两次更改主题后,它看起来像这样: <ConversationId Id="AAQkADI2MDY4MjQzLWQ1YzQtNGZkNi1iZmE4LTRjZmZmNGEyZjQ0YwAQAEjf5yU/W9VMo6HxuanvhYE=" /> <ConversationTopic>2nd subject</ConversationTopic> 所以前X个字符是相同的,但后来有分歧. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |