通过带有SchemaExtension数据的Microsoft Graph API发送消息

时间:2018-08-14 16:48:10

标签: c# office365 microsoft-graph

我正在寻找一些帮助格式化Microsoft Graph API中的架构扩展数据的帮助。使用此正文,我已经能够通过代码和通过Graph Explorer成功发送Office 365消息:

nrs <- regmatches(x, gregexpr("[[:digit:]]+", x))
nrs <- as.numeric(unlist(nrs))
i <- 1:length(nrs); i <- i[(i%%2)==1]
for(h in i){print(paste0(nrs[h],'-',nrs[h+1],'%'))}

[1] "5-10%"
[1] "20-20%"

我创建了一个架构扩展并将其提升为“可用”状态。我可以查询扩展名以验证它是否可用并获得此响应正文:

{
  "message": {
    "subject": "Test Subject",
    "body": {
      "contentType": "Text",
      "content": "Test Body "
    },
    "toRecipients": [
      {
        "emailAddress": {
          "address": "foo@email.com"
        }
      }
    ]
  }
}

到目前为止,我还无法将扩展数据附加到新消息中。我尝试过这样格式化我的请求正文:

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#schemaExtensions",
    "value": [
        {
            "id": "extc5bnq6uk_TestExtension",
            "description": "Test Extension",
            "targetTypes": [
                "Message"
            ],
            "status": "Available",
            "owner": "mysecretclienttenantgoeshere",
            "properties": [
                {
                    "name": "ValueOne",
                    "type": "String"
                },
                {
                    "name": "ValueTwo",
                    "type": "String"
                }
            ]
        }
    ]
}

并这样:

{
  "message": {
    "subject": "Test Subject",
    "body": {
      "contentType": "Text",
      "content": "Test Body "
    },
    "toRecipients": [
      {
        "emailAddress": {
          "address": "foo@email.com"
        }
      }
    ],
    "extc5bnq6uk_TestExtension": {
      "ValueOne": "TestValue",
      "ValueTwo": "TestValue"
    }
  }
}

两种格式都返回带有响应正文的400代码:

{
  "message": {
    "subject": "Test Subject",
    "body": {
      "contentType": "Text",
      "content": "Test Body "
    },
    "toRecipients": [
      {
        "emailAddress": {
          "address": "foo@email.com"
        }
      }
    ],
    "extensions":[
    {
        "extc5bnq6uk_TestExtension" : {
            "ValueOne" : "TestValue"
            "ValueTwo" : "TestValue"
        }
    }
    ]
  }
}

我要在图形浏览器中发布到该URL:

  

https://graph.microsoft.com/v1.0/me/sendMail

以及代码中的“ messages”和“ sendMail”端点。

2 个答案:

答案 0 :(得分:1)

我在文档的Known Limitations中找到了答案。某些资源类型(包括消息)必须分两个阶段完成,一个是初始发布,然后是后续补丁。

创建消息,然后使用此JSON修补返回有效的响应。

{
    "extc5bnq6uk_TestExtension": {
        "ValueOne": "Test Value One",
        "ValueTwo": "Test Value Two"
    }
}

不幸的是,消息上的模式扩展的另一个限制是它们不能用于过滤消息,这是我最终追求的目标。

  

过滤架构扩展属性(使用$ filter   表达)不支持Outlook实体类型-联系人,   活动,消息或帖子。

答案 1 :(得分:0)

杰夫

根据您发布的问题,您已经成功创建了schemaExtension。我认为您想使用此schemaExtension发送电子邮件,但是当您使用此schemaExtension发送电子邮件时,我们会在响应中获得400代码。

根据我的测试,我认为我们可以使用请求正文作为打击。

1。创建如下所示的schemaExtension:

{
   "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#schemaExtensions/$entity",
   "id":"{extensionId}",
   "description":"sample description",
   "targetTypes":[
       "Message"
    ],
   "status":"Available",
   "owner":"{owner id}",
   "properties":[
      {
          "name":"p1",
          "type":"String"
      },
      {
          "name":"p2",
          "type":"String"
      }
    ]
  }
  1. 创建一条消息

POST https://graph.microsoft.com/v1.0/me/messages

{
   "message":{
      "subject":"Meet for lunch?",
      "body":{
          "contentType":"Text",
          "content":"The new cafeteria is open."
       },
      "toRecipients":[
          {
              "emailAddress":{
                  "address":"{toRecipients email address}"
              }
          }
      ],
      "extensions":[
          {
              "@odata.type":"Microsoft.Graph.OpenTypeExtension",
              "extensionName":"{extensionName}",
              "p1":"Wingtip Toys",
              "p2":"10000"
          }
      ]
  },
  "saveToSentItems":"false"
}
  1. 当我们发送带有请求的消息时,我们将获得202代码。 {toRecipients电子邮件地址}将收到电子邮件。