如何将MS Graph restId转换为旧版Outlook HexEntryId格式?
解决MS Graph转换REST ID到HexEntryId的方法
由于MS Graph的translateExchangeIds接口不支持直接输出HexEntryId格式,你可以通过以下两种可行途径实现转换:
方法一:继续调用EWS的ConvertId接口
EWS的ConvertId接口支持将Graph的REST ID直接转换为HexEntryId,只需在请求中将源格式指定为RestId即可:
请求示例
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:mes="http://schemas.microsoft.com/exchange/services/2006/messages"> <soapenv:Header> <typ:RequestServerVersion Version="Exchange2013_SP1"/> </soapenv:Header> <soapenv:Body> <mes:ConvertId DestinationFormat="HexEntryId"> <mes:SourceIds> <typ:AlternateId Format="RestId" Id="AQMkADAwATNiZmYAZC1hNTUwLWQ0YjAtMDACLTAwCgBGAAAD8s5T9k040G6T4aL1c4w0hAEAAAAAAENAAAA=" Mailbox="timetelldev@timetell.nl"/> </mes:SourceIds> </mes:ConvertId> </soapenv:Body> </soapenv:Envelope>
响应示例
接口会返回与你之前使用EWS转换时格式一致的HexEntryId:
<ResponseMessages> <ConvertIdResponseMessage ResponseClass="Success"> <ResponseCode>NoError</ResponseCode> <AlternateId type="t:AlternateIdType" Format="HexEntryId" Id="00000000ABC72AACB341FF4F9886BAAC125E772807007591CF0335B23144ADC7FCD71BA6E2FC00000000010D00007591CF0335B23144ADC7FCD71BA6E2FC0002762AFE1F0000" Mailbox="timetelldev@timetell.nl"/> </ConvertIdResponseMessage> </ResponseMessages>
方法二:手动格式转换
HexEntryId本质是EWS ID(或Graph REST ID)解码后的二进制数据转十六进制字符串。Graph的REST ID与EWS ID编码规则兼容,可通过以下步骤手动转换:
- 转换为标准Base64编码:如果Graph返回的REST ID是Base64URL格式(包含
-或_),先将-替换为+、_替换为/,并补全末尾的=使字符串长度为4的倍数。 - 解码Base64为二进制数据:对标准Base64字符串进行解码,得到原始二进制数据。
- 二进制转十六进制字符串:将二进制数据转换为大写的十六进制字符串,即为HexEntryId。
代码示例(Python)
import base64 # 替换为你的Graph REST ID graph_rest_id = "AQMkADAwATNiZmYAZC1hNTUwLWQ0YjAtMDACLTAwCgBGAAAD8s5T9k040G6T4aL1c4w0hAEAAAAAAENAAAA=" # 处理Base64URL格式(如果需要) standard_base64 = graph_rest_id.replace('-', '+').replace('_', '/') # 补全=号 padding = len(standard_base64) % 4 if padding != 0: standard_base64 += '=' * (4 - padding) # 解码为二进制数据 binary_data = base64.b64decode(standard_base64) # 转换为十六进制字符串(大写) hex_entry_id = binary_data.hex().upper() print(hex_entry_id)
内容的提问来源于stack exchange,提问作者Jan Doggen
相关产品推荐
相关产品推荐

