【问题标题】:Is there any way to create message/(inbox mail) with specific date (i.e create/sentDateTime/updateDateTime) using Graph/ office REST API?有没有办法使用 Graph/office REST API 创建具有特定日期(即创建/发送日期时间/更新日期时间)的消息/(收件箱邮件)?
【发布时间】:2018-08-11 01:53:41
【问题描述】:

尝试将 EWS 创建的旧 SOAP 消息转换为现代 Graph API ,以前我成功地创建了一条具有特定日期的消息,因为发送了已经包含日期的 MimeConent 示例:

           <?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:Header>
                  <t:RequestServerVersion Version="Exchange2016" />
                  <t:ExchangeImpersonation>
                     <t:ConnectingSID>
                        <t:PrincipalName>admin@xxx.com</t:PrincipalName>
                     </t:ConnectingSID>
                  </t:ExchangeImpersonation>
               </soap:Header>
               <soap:Body>
                  <CreateItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" MessageDisposition="SaveOnly" SendMeetingInvitations="SendToNone">

                     <SavedItemFolderId>
                        <t:FolderId Id="AAMkAGM5MDIzODk0LTg2NmMtNDE3YS05M2YwLTBhZjgzZWQxODUxYQAuAAAAAAAX07OCLT/gQbX2qJJIVqojAQCdUXzQSXe1Tqh1KvhfGj3SAARQNYfhAAA=" ChangeKey="AQAAABYAAACdUXzQSXe1Tqh1KvhfGj3SAARSy240" />
                     </SavedItemFolderId>
                     <Items>
                        <t:Message>

                  //here MimeContent that has the specific dates....how to 
                       do that with REST ??????

                          <t:MimeContent CharacterSet="UTF-8">

  ......{BASE 64 ........} </t:MimeContent>

                           <t:ReminderIsSet>false</t:ReminderIsSet>
                           <t:ExtendedProperty>
                              <t:ExtendedFieldURI PropertyTag="0x0E07" PropertyType="Integer" />
                              <t:Value>4</t:Value>
                           </t:ExtendedProperty>
                        </t:Message>
                     </Items>
                  </CreateItem>
               </soap:Body>
            </soap:Envelope>

如果我使用 base64 解码 MimeContent ,将得到所描述的结果,这会为我创建特定的“日期”,例如:createTime...

Date: Thu, 22 Jun 2017 11:36:01 +0000 (UTC)
From: valekseev@zzzzz.com
To: xxx@yyyy.zzzzz.com
Message-ID: <CAP-g2LzDoXpYeP+7PPs3LJYQtTkPe9ErqD-SgnbHKYZkkw5YuA@mail.gmail.com>
Subject: Test OutOfMemory
MIME-Version: 1.0
Content-Type: multipart/mixed; 
    boundary="----=_Part_0_1169672575.1519724417079"

------=_Part_0_1169672575.1519724417079
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta content="text/html; charset=utf-8">
</head>
<body>
<div dir="ltr">Test OutOfMemory<br>
</div>
</body>
</html>

现在我正在尝试对 REST API 做同样的事情(值不同,但没关系):

POST https://graph.microsoft.com/beta/me/messages
    Content-type: application/json

    {
        "subject":"Did you see last night's game?",
        "importance":"Low",
        "sentDateTime":"2016-12-23T07:29:58Z",
        "body":{
            "contentType":"HTML",
            "content":"They were <b>awesome</b>!"
        },
        "toRecipients":[
            {
                "emailAddress":{
                    "address":"AdeleV@contoso.onmicrosoft.com"
                }
            }
        ]

    , "singleValueExtendedProperties": [
          {
             "id":"Integer 0x0E07",
             "value":"4"
          }
        ]
     }
    }

但是我收到的消息总是带有“现在”的sentDateTime...为什么?

也许有一个选项可以用我的“内容”而不是正文来创建消息...

输出:

    "@odata.context":"https://graph.microsoft.com/beta/$metadata#users('ad787b4f-1fda-4523-8e48-ffedb7f4635f')/messages/$entity",
    "@odata.etag":"W/\"CQAAABYAAAAmXr9SsE/UR4PcnTZcg7qWAAAFS12t\"",
    "id":"AAMkAGRWAAAFSmKXAAA=",

     // I want here to be "2016-12-23T07:29:58Z" 
    "createdDateTime":"2018-03-02T19:14:13Z",  
    "lastModifiedDateTime":"2018-03-02T19:14:13Z",
    "changeKey":"CQAAABYAAAAmXr9SsE/UR4PcnTZcg7qWAAAFS12t",
    "categories":[

    ],
    "receivedDateTime": "2018-03-02T19:14:13Z",
    "sentDateTime": "2018-03-02T19:14:13Z",
    "hasAttachments":false,
    "internetMessageId":"<MWHPR130@MWHPR130.namprd13.prod.outlook.com>",
    "subject":"Did you see last night's game?".....,....
     ......
     ......

是否可以像我之前对 EWS 所做的那样创建具有特定创建日期的消息...也许是一些 MAPI 属性,例如:

https://msdn.microsoft.com/en-us/library/office/cc765677.aspx

谢谢

【问题讨论】:

  • Rest API 今天不支持插入 Mime 内容或使用 MIME 内容创建消息的能力。请在此处发送您的建议或对现有建议进行投票:officespdev.uservoice.com
  • @Yogesh ,有没有其他方法可以设置“创建”/“更新”日期...我看到了一些 MAPI 标签属性,例如 PR_CREATE_TIME 等等......也许,可以吗帮助 ???喜欢:msdn.microsoft.com/en-us/library/office/cc765677.aspx
  • 不这么认为。

标签: office365 exchangewebservices microsoft-graph-api outlook-restapi


【解决方案1】:

不。你不能那样做。存储/运输在创建和交付项目时在项目上标记日期。出于多种原因,最好保持该字段的准确性,例如合法持有/合规等......

【讨论】:

  • @David Sterling - MSFT,嗨..我已经将我的问题编辑得更具体....请,如果可以,请再次查看:)
  • EWS 中的 MimeContent 非常接近消息的“全保真”表示,您是对的,EWS 支持它。 REST API 当前不支持 MIME,但将来可能会支持。我们一直对 MIME 支持犹豫不决的原因是 MIME 处理实际上非常昂贵。这是因为 Exchange 不会将消息存储为 MIME,而是存储我们称之为 MIME“骨架”的东西,因此转换回 MIME 需要在该骨架上添加肉体:)。所以,目前我知道没有办法通过 REST 覆盖这些属性。
  • 感谢您的回答......所有 MAPI 属性怎么样......我看到了类似:PR_CREATE_TIME 等标签......他们无能为力,它们的用途是什么?
  • 是的,这些都是 MAPI 属性,但并非所有 MAPI 属性都是可设置的。 CreateTime、ReceivedTime 等...非常适合获取并允许您显示按接收日期排序的消息列表。
猜你喜欢
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多