Outlook 任务 REST API 参考(版本 2.0)

适用于:Exchange Online | Office 365 | Hotmail.com | Live.com | MSN.com | Outlook.com | Passport.com

Outlook Task REST API 让你能在 Office 365 中创建、读取、同步、更新和删除通过 Azure Active Directory 保护的用户任务。 用户的帐户可以是 Office 365 帐户或 Microsoft 帐户(Hotmail.com、Live.com、MSN.com、Outlook.com 和 Passport.com)。

备注

为简便起见,本文的其余部分使用 Outlook.com 来指代这些 Microsoft 帐户域。

对 API 的 2.0 版不感兴趣? 在左侧的目录中,转到 Office 365 REST API 参考部分,然后选择所需的版本。

概述

你可以使用 Outlook 中的任务跟踪工作项。 可以记录其开始日期、截止日期或实际完成日期;其进度或状态;或者它是否重复发生或或需要提醒。

任务以任务文件夹的形式组织,后者又以任务组的形式组织。 每个邮箱都有一个默认任务文件夹(具有 Name 属性Tasks)和一个默认任务组(Name 属性为 My Tasks)。

使用 Task REST API

身份验证

像其他 Outlook REST API 那样,对于 Task REST API 的每个请求,都应该包含有效的访问令牌。 获取访问令牌需要注册和识别应用,并获得适当的授权。

你可以详细了解一些适用于你的简化注册和授权选项。 在 Task REST API 中继续执行特定操作时,请记住这一点。

API 版本

此 API 已从预览升级到正式发布 (GA) 状态。 它在 Outlook REST API 的 2.0 和 beta 版本中得到支持。

目标用户

Task API 请求始终代表登录用户执行。

有关 Outlook REST API 所有子集的更多信息,请参阅使用 Outlook REST API

URL 参数

本文中的示例使用以下占位符作为 REST 请求 URL 的参数。

参数 类型 说明
URL 参数
attachment_id 字符串 附件的数字 ID,在用户邮箱中是唯一的。
folder_id 字符串 众所周知的默认 Tasks 文件夹名称或任务文件夹的数字 ID,在用户邮箱中是唯一的。
group_id 字符串 任务组的数字 ID,在用户邮箱中是唯一的。
task_id 字符串 数字任务 ID,在用户邮箱中是唯一的。

指定 StartDateTime 和 DueDateTime 属性

创建任务时:

  • StartDateTimeDueDateTime 是可选的,但设置 StartDateTime 需要将 DueDateTime 设置为相同或更晚的日期。
  • 如果你只设置了 StartDateTime,则 DueDateTime 会自动设置为与 StartDateTime 相同的值。
  • 如果将 DueDateTime 设置为 null,则 StartDateTime 也将自动设置为 null

如果在创建或更新任务时选择设置 StartDateTimeDueDateTime

  • 指定日期和时区信息。
  • 不要在这些属性中指定具体时间,因为 POST(或 PATCH)方法始终忽略它并在指定时区内假定为午夜。
  • 默认情况下,POST(或 PATCH)方法会将值转换为 UTC,并在响应中以 UTC 形式返回该值。

举例来说,如果在 StartDateTime 中指定东部标准时间 (EST) 4 月 26 日:

  "StartDateTime": {
      "DateTime": "2016-04-26T09:00:00",
      "TimeZone": "Eastern Standard Time"
  }

POST(或 PATCH)会忽略时间部分,将 EST 4 月 26 日午夜转换为 UTC,并在响应中以 UTC 形式返回该值:

  "StartDateTime": {
    "DateTime": "2016-04-26T04:00:00.0000000",
    "TimeZone": "UTC"
  }

你可以使用 Prefer: outlook.timezone 标头,让响应中的所有日期相关属性以不同于 UTC 的时区表示。

任务资源中与日期相关的属性包括以下各项:

  • CompletedDateTime
  • CreatedDateTime
  • DueDateTime
  • LastModifiedDateTime
  • ReminderDateTime
  • StartDateTime

默认情况下,POST、GET、PATCH 和 Complete 操作在其 REST 响应中以 UTC 形式返回日期相关属性。 你可以使用 Prefer: outlook.timezone 标头,让响应中的所有日期相关属性以不同于 UTC 的时区表示。 以下示例在对应的响应中以 EST 形式返回日期相关属性:

Prefer: outlook.timezone="Eastern Standard Time"

有关 Outlook REST API 所有子集的更多信息,请参阅使用 Outlook REST API

创建任务

最低要求的范围

创建一个任务。 有两个主要场景。

你可以在用户邮箱的默认任务组(My Tasks)和默认任务文件夹(Tasks)中创建一个任务。 在这种情况下,你不需要指定任何任务组或任务文件夹。

POST https://outlook.office.com/api/v2.0/me/tasks

你也可以在特定任务文件夹中创建任务:

POST https://outlook.office.com/api/v2.0/me/taskfolders('{folder_id}')/tasks

在请求正文中,提供要创建的任务的 JSON 表示形式。

查看有关设置 StartDateTimeDueDateTime 的更多信息。

了解如何为响应中的所有日期相关属性指定特定时区。

响应

成功状态代码:201 已创建

响应主体:创建的任务

示例请求

第一个示例在指定任务文件夹中创建一个任务,并在请求主体中以太平洋标准时间 (PST) 形式表示 StartDateTimeDueDateTime

POST https://outlook.office.com/api/v2.0/me/taskfolders('AAMkADIyAAAhrbPXAAA=')/tasks
Content-Type: application/json

{
  "Subject": "Shop for dinner",
  "StartDateTime": {
      "DateTime": "2016-04-23T18:00:00",
      "TimeZone": "Pacific Standard Time"
  },
  "DueDateTime":  {
      "DateTime": "2016-04-25T13:00:00",
      "TimeZone": "Pacific Standard Time"
  }
}

示例响应

POST 方法会忽略请求正文中的时间部分,并假定时间始终是指定时区中的午夜 (PST)。 然后,在默认情况下,POST 方法会转换所有日期相关属性,并在响应中以 UTC 形式显示这些属性。

Status code: 201 Created

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/TaskFolders('AAMkADIyAAAhrbPXAAA%3D')/Tasks/$entity",
  "@odata.id": "https://outlook.office.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/Tasks('AAMkADIyAAAhrb_PAAA=')",
  "@odata.etag": "W/\"hmM7Eb/jgEec8l3+gkJEawAAIbAOlw==\"",
  "Id": "AAMkADIyAAAhrb_PAAA=",
  "CreatedDateTime": "2016-04-22T05:44:01.2012012Z",
  "LastModifiedDateTime": "2016-04-22T05:44:02.9980882Z",
  "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIOJMxw==",
  "Categories": [ ],
  "AssignedTo": null,
  "Body": {
    "ContentType": "Text",
    "Content": ""
  },
  "CompletedDateTime": null,
  "DueDateTime": {
    "DateTime": "2016-04-25T07:00:00.0000000",
    "TimeZone": "UTC"
  },
  "HasAttachments":false,
  "Importance": "Normal",
  "IsReminderOn": false,
  "Owner": "Administrator",
  "ParentFolderId": "AQMkADA1MTkAAAAIBEgAAAA==",
  "Recurrence": null,
  "ReminderDateTime": null,
  "Sensitivity": "Normal",
  "StartDateTime": {
    "DateTime": "2016-04-23T07:00:00.0000000",
    "TimeZone": "UTC"
  },
  "Status": "NotStarted",
  "Subject": "Shop for dinner"
}

示例请求

为了演示 Prefer: outlook.timezone 标头的工作方式,下一个示例将创建一个任务,以 东部标准时间 (EST) 开头表示 StartDateTimeDueDateTime,并包括Prefer太平洋标准时间 (PST) 的标头。

POST https://outlook.office.com/api/v2.0/me/tasks HTTP/1.1

Content-Type: application/json
Prefer: outlook.timezone="Pacific Standard Time"

{
  "Subject": "Shop for children's weekend",
  "StartDateTime": {
      "DateTime": "2016-05-03T09:00:00",
      "TimeZone": "Eastern Standard Time"
  },
  "DueDateTime":  {
      "DateTime": "2016-05-05T16:00:00",
      "TimeZone": "Eastern Standard Time"
  }
}

示例响应

就像上一个示例中一样,POST 方法会忽略请求正文中 StartDateTimeDueDateTime 的时间部分,并假定时间始终为指定时区 (EST) 中的午夜。

由于 Prefer 标头指定 PST,因此 POST 方法会在响应中以 PST 形式表示所有日期相关属性。 特别是,对于 StartDateTimeDueDateTime 属性,POST 方法会将 EST 形式的午夜转换为 PST,并在响应中以 PST 形式返回它们。

Status code: 201 Created

{
    "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Tasks/$entity",
    "@odata.id": "https://outlook.office.com/api/v2.0/Users('86b6ceaf-57f7-4278-97c4-4da0a97f6cdb@70559e59-b378-49ea-8e53-07a3a3d27f5b')/Tasks('AAMkADA1MHgwAAA=')",
    "@odata.etag": "W/\"1/KC9Vmu40G3DwB6Lgs7MAAAIW9XXA==\"",
    "Id": "AAMkADA1MHgwAAA=",
    "CreatedDateTime": "2016-04-22T15:19:18.9526004-07:00",
    "LastModifiedDateTime": "2016-04-22T15:19:19.015101-07:00",
    "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIW9XXA==",
    "Categories": [
    ],
    "AssignedTo": null,
    "Body": {
        "ContentType": "Text",
        "Content": ""
    },
    "CompletedDateTime": null,
    "DueDateTime": {
        "DateTime": "2016-05-04T21:00:00.0000000",
        "TimeZone": "Pacific Standard Time"
    },
    "HasAttachments":false,
    "Importance": "Normal",
    "IsReminderOn": false,
    "Owner": "Administrator",
    "ParentFolderId": "AQMkADA1MTEgAAAA==",
    "Recurrence": null,
    "ReminderDateTime": null,
    "Sensitivity": "Normal",
    "StartDateTime": {
        "DateTime": "2016-05-02T21:00:00.0000000",
        "TimeZone": "Pacific Standard Time"
    },
    "Status": "NotStarted",
    "Subject": "Shop for children's weekend"
}

获取任务

获取所有任务

最低要求的范围

获取多个任务。

你可以获取登录用户邮箱中的所有任务。

GET https://outlook.office.com/api/v2.0/me/tasks

或者可以获取特定文件夹中的所有任务:

GET https://outlook.office.com/api/v2.0/me/taskfolders('{folder_id}')/tasks

如果有多个任务组,并且你想要获取特定任务组中的所有任务,请首先获取该任务组中的所有任务文件夹,然后获取其中每个任务文件夹中的任务。

响应

成功状态代码:200 OK

响应正文:任务集合

默认情况下,响应中的日期相关属性以 UTC 形式表示。 了解如何为响应中的所有日期相关属性指定特定时区。

示例请求

以下示例获取用户邮箱中的所有任务。

GET https://outlook.office.com/api/v2.0/me/tasks

示例响应

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Tasks",
  "value": [
    {
      "@odata.id": "https://outlook.office.com/api/v2.0/Users('86b6ceaf-57f7-4278-97c4-4da0a97f6cdb@70559e59-b378-49ea-8e53-07a3a3d27f5b')/Tasks('AAMkADA1MTrfAAA=')",
      "@odata.etag": "W/\"1/KC9Vmu40G3DwB6Lgs7MAAAIOJMxw==\"",
      "Id": "AAMkADA1MTrfAAA=",
      "CreatedDateTime": "2016-04-22T05:44:01.2012012Z",
      "LastModifiedDateTime": "2016-04-22T05:44:02.9980882Z",
      "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIOJMxw==",
      "Categories": [ ],
      "AssignedTo": null,
      "Body": {
        "ContentType": "Text",
        "Content": ""
      },
      "CompletedDateTime": null,
      "DueDateTime": {
        "DateTime": "2016-04-25T07:00:00.0000000",
        "TimeZone": "UTC"
      },
      "HasAttachments":false,
      "Importance": "Normal",
      "IsReminderOn": false,
      "Owner": "Administrator",
      "ParentFolderId": "AQMkADA1MTBEgAAAA==",
      "Recurrence": null,
      "ReminderDateTime": null,
      "Sensitivity": "Normal",
      "StartDateTime": {
        "DateTime": "2016-04-23T07:00:00.0000000",
        "TimeZone": "UTC"
      },
      "Status": "NotStarted",
      "Subject": "Shop for dinner"
    },
    {
      "@odata.id": "https://outlook.office.com/api/v2.0/Users('86b6ceaf-57f7-4278-97c4-4da0a97f6cdb@70559e59-b378-49ea-8e53-07a3a3d27f5b')/Tasks('AAMkADA1MTrgAAA=')",
      "@odata.etag": "W/\"1/KC9Vmu40G3DwB6Lgs7MAAAIOJMyQ==\"",
      "Id": "AAMkADA1MTrgAAA=",
      "CreatedDateTime": "2016-04-22T06:03:35.9279794Z",
      "LastModifiedDateTime": "2016-04-22T06:03:35.9436052Z",
      "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIOJMyQ==",
      "Categories": [ ],
      "AssignedTo": null,
      "Body": {
        "ContentType": "Text",
        "Content": ""
      },
      "CompletedDateTime": null,
      "DueDateTime": {
        "DateTime": "2016-04-27T04:00:00.0000000",
        "TimeZone": "UTC"
      },
      "HasAttachments":false,
      "Importance": "Normal",
      "IsReminderOn": false,
      "Owner": "Administrator",
      "ParentFolderId": "AQMkADA1MTBEgAAAA==",
      "Recurrence": null,
      "ReminderDateTime": null,
      "Sensitivity": "Normal",
      "StartDateTime": {
        "DateTime": "2016-04-26T04:00:00.0000000",
        "TimeZone": "UTC"
      },
      "Status": "NotStarted",
      "Subject": "Shop for dinner"
    }
  ]
}

获取一个任务

最低要求的范围

获取特定任务。

GET https://outlook.office.com/api/v2.0/me/tasks('{task_id}')

响应

成功状态代码:200 OK

响应正文:请求的任务

默认情况下,响应中的日期相关属性以 UTC 形式表示。 了解如何为响应中的所有日期相关属性指定特定时区。

示例请求

GET https://outlook.office.com/api/v2.0/me/tasks('AAMkADA1MTrgAAA=') 

示例响应

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Tasks/$entity",
  "@odata.id": "https://outlook.office.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/Tasks('AAMkADA1MTrgAAA=')",
  "@odata.etag": "W/\"hmM7Eb/jgEec8l3+gkJEawAAIa/+kw==\"",
  "Id": "AAMkADA1MTrgAAA=",
  "CreatedDateTime": "2016-04-22T06:03:35.9279794Z",
  "LastModifiedDateTime": "2016-04-22T06:03:35.9436052Z",
  "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIOJMyQ==",
  "Categories": [ ],
  "AssignedTo": null,
  "Body": {
    "ContentType": "Text",
    "Content": ""
  },
  "CompletedDateTime": null,
  "DueDateTime": {
    "DateTime": "2016-04-27T04:00:00.0000000",
    "TimeZone": "UTC"
  },
  "HasAttachments":false,
  "Importance": "Normal",
  "IsReminderOn": false,
  "Owner": "Administrator",
  "ParentFolderId": "AQMkADA1MTBEgAAAA==",
  "Recurrence": null,
  "ReminderDateTime": null,
  "Sensitivity": "Normal",
  "StartDateTime": {
    "DateTime": "2016-04-26T04:00:00.0000000",
    "TimeZone": "UTC"
  },
  "Status": "NotStarted",
  "Subject": "Shop for dinner"
}

更新任务

最低要求的范围

更改任务的可写属性。

PATCH https://outlook.office.com/api/v2.0/me/tasks/{task_id}

在请求正文中,提供可写属性的 JSON 表示形式以在任务中更新。

查看有关设置 StartDateTimeDueDateTime 的更多信息。

CompletedDateTime 属性可通过 Complete 操作设置,或通过 PATCH 操作显式设置。 如果使用 PATCH 设置 CompletedDateTime,请确保同样将 Status 设置为 Completed

默认情况下,响应中的日期相关属性以 UTC 形式表示。 了解如何为响应中的所有日期相关属性指定自定义时区。

响应

成功状态代码:200 OK

响应正文:更新的任务

示例请求

以下示例修改 DueDateTime 并使用 Prefer: outlook.timezone 标头指定要在响应中以东部标准时间 (EST) 形式表示的日期相关属性。

PATCH https://outlook.office.com/api/v2.0/me/tasks('AAMkADA1MTHgwAAA=')

Prefer: outlook.timezone="Eastern Standard Time"
Content-Type: application/json

{
  "DueDateTime":  {
      "DateTime": "2016-05-06T16:00:00",
      "TimeZone": "Eastern Standard Time"
  }
}

示例响应

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Tasks/$entity",
  "@odata.id": "https://outlook.office.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/Tasks('AAMkADA1MTHgwAAA=')",
  "@odata.etag": "W/\"hmM7Eb/jgEec8l3+gkJEawAAIa/+lg==\"",
  "Id": "AAMkADA1MTHgwAAA=",
    "CreatedDateTime": "2016-04-22T18:19:18.9526004-04:00",
    "LastModifiedDateTime": "2016-04-22T18:38:20.5541528-04:00",
    "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIW9XXg==",
    "Categories": [
    ],
    "AssignedTo": null,
    "Body": {
        "ContentType": "Text",
        "Content": ""
    },
    "CompletedDateTime": null,
    "DueDateTime": {
        "DateTime": "2016-05-06T00:00:00.0000000",
        "TimeZone": "Eastern Standard Time"
    },
    "HasAttachments":false,
    "Importance": "Normal",
    "IsReminderOn": false,
    "Owner": "Administrator",
    "ParentFolderId": "AQMkADA1MTIBEgAAAA==",
    "Recurrence": null,
    "ReminderDateTime": null,
    "Sensitivity": "Normal",
    "StartDateTime": {
        "DateTime": "2016-05-03T00:00:00.0000000",
        "TimeZone": "Eastern Standard Time"
    },
    "Status": "NotStarted",
    "Subject": "Shop for children's weekend"
}

删除任务

最低要求的范围

删除用户邮箱中的指定任务。

DELETE https://outlook.office.com/api/v2.0/me/tasks('{task_id}')

响应

成功状态代码:204 无内容

响应正文:无

示例请求

DELETE https://outlook.office365.com/api/v2.0/me/tasks('AAMkADIyAAAhrb_QAAA=')

示例响应

Status code: 204 No Content

完成任务

最低要求的范围

完成一项任务,并将 CompletedDateTime 属性设置为当前日期,以及将 Status 属性设置为 Completed

POST https://outlook.office.com/api/v2.0/me/tasks('{task_id}')/complete

备注

CompletedDateTime 表示任务完成的日期。 CompletedDateTime 的时间部分默认情况下设置为 UTC 的午夜。

应用可在 Prefer 请求标头中指定自定义时区。 以下示例将 CompletedDateTime 设置为太平洋标准时间 (PST) 时区:

Prefer: outlook.timezone="Pacific Standard Time"

此请求标头将响应中的所有日期相关属性设置为指定时区。

响应

成功状态代码:200 OK

响应正文:任务集合中的已完成任务。 如果以循环序列的形式完成任务,则任务集合将包含序列中的完成的任务和下一个任务。

示例请求

以下示例将指定任务标记为完成。 由于它在 Prefer: outlook.timezone 标头中指定了太平洋标准时间 (PST),因此会在响应中以 PST 形式表示 CompletedDateTime 及其他日期相关属性。

POST https://outlook.office.com/api/v2.0/me/tasks('AAMkADA1MT15rfAAA=')/complete

Prefer: outlook.timezone="Pacific Standard Time"

示例响应

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Tasks",
  "value": [
    {
      "@odata.id": "https://outlook.office365.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/Tasks('AAMkADA1MT15rfAAA=')",
      "@odata.etag": "W/\"hmM7Eb/jgEec8l3+gkJEawAAIa/+lw==\"",
      "Id": "AAMkADA1MT15rfAAA=",
      "CreatedDateTime": "2016-04-21T22:44:01.2012012-07:00",
      "LastModifiedDateTime": "2016-04-22T19:28:38.5300447-07:00",
      "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIW9XYQ==",
      "Categories": [
      ],
      "AssignedTo": null,
      "Body": {
          "ContentType": "Text",
          "Content": ""
      },
      "CompletedDateTime": {
          "DateTime": "2016-04-22T00:00:00.0000000",
          "TimeZone": "Pacific Standard Time"
      },
      "DueDateTime": {
          "DateTime": "2016-04-25T00:00:00.0000000",
          "TimeZone": "Pacific Standard Time"
      },
      "HasAttachments":false,
      "Importance": "Normal",
      "IsReminderOn": false,
      "Owner": "Administrator",
      "ParentFolderId": "AQMkADA1MTIBEgAAAA==",
      "Recurrence": null,
      "ReminderDateTime": null,
      "Sensitivity": "Normal",
      "StartDateTime": {
          "DateTime": "2016-04-21T00:00:00.0000000",
          "TimeZone": "Pacific Standard Time"
      },
      "Status": "Completed",
      "Subject": "Shop for dinner"
    }
  ]
}

同步任务或任务文件夹

最低要求的范围

你可以同步任务文件夹中的任务或用户邮箱中的任务文件夹。 同步任务是按文件夹进行的操作,例如,你可以同步默认任务文件夹 Tasks 中的所有任务。 要同步文件夹层次结构中的任务,你需要分别同步每个任务文件夹。 同步任务或任务文件夹的过程相似,通常需要一轮两次以上的同步请求,每个请求都是 GET 调用。

使用 GET 方法与你在文件夹中获取任务在邮箱中获取任务文件夹的方式很像,只是你会包括某些请求标头,并在适当时包括 deltaTokenskipToken

请求标头

  • 你必须在所有同步请求中指定 Prefer: odata.track-changes 标头,但包括从以前的同步请求中返回的 skipToken 的同步请求除外。 在第一个响应中,查找 Preference-Applied: odata.track-changes 标头,在继续之前确认资源支持同步。 (如果在同步任务,你可在适用于任务的第二个响应数据示例中了解有关 skipToken 的更多信息,如果在同步任务文件夹,则可在适用于任务文件夹的第二个响应数据示例中了解相关信息。)
  • 你可以指定 Prefer: odata.maxpagesize={x} 标头来指明每个同步请求返回的最大任务数(或任务文件夹数,具体取决于你正在同步哪个)。

下面是一轮典型的同步操作:

  1. 使用强制性 Prefer: odata.track-changes 标头发出初始 GET 请求。 对同步请求的初始响应始终返回 deltaToken。 (第二个 GET 请求和后续 GET 请求与第一个 GET 请求不同,不同之处在于该请求包括在前一个响应中收到的 deltaTokenskipToken。)

  2. 如果第一个响应返回 Preference-Applied: odata.track-changes 标头,你可以继续同步资源。

    • 进行第二次 GET 请求。 指定 Prefer: odata.track-changes 标头和第一次 GET 请求返回的 deltaToken,确定是否有任何其他要同步的资源。第二次请求将返回其他实例,并返回 skipToken(如果还有更多实例)或 deltaToken(如果最后一个实例已同步,这种情况下你可以停止)。

    • 通过发送 GET 调用并包括前一次调用中返回的 skipToken,继续进行同步。 在再次使用 deltaToken 获得包含 @odata.deltaLink 标头的最终响应(指明同步已完成)时停止。

看一看一轮同步中的初始和后续调用的语法。

要同步任务文件夹中的任务

初始请求:

GET https://outlook.office.com/api/v2.0/me/TaskFolders('{folder_id}')/Tasks

第二个请求,或后续轮次中的第一个请求:

GET https://outlook.office.com/api/v2.0/me/TaskFolders('{folder_id}')/Tasks/?$deltatoken={delta_token}

同一轮中的第三个或后续请求;在再次使用 deltaToken 获得包含 @odata.deltaLink 标头的响应时停止:

GET https://outlook.office.com/api/v2.0/me/TaskFolders('{folder_id}')/Tasks/?$skiptoken={skip_token}

同步邮箱中的任务文件夹

初始请求:

GET https://outlook.office.com/api/v2.0/me/TaskFolders

第二个请求,或后续轮次中的第一个请求:

GET https://outlook.office.com/api/v2.0/me/TaskFolders/?$deltatoken={delta_token}

同一轮中的第三个或后续请求;在再次使用 deltaToken 获得包含 @odata.deltaLink 标头的响应时停止:

GET https://outlook.office.com/api/v2.0/me/TaskFolders/?$skiptoken={skip_token}

参数

参数 类型 说明
标头参数
Prefer odata.track-changes 表示该请求是一个同步请求。 对于一个轮次中的前 2 个 GET 请求为必需。
Prefer odata.maxpagesize 设置要在每个响应中返回的消息数量。 可选。
URL 参数
deltaToken 字符串 作为前一个同步响应中 @odata.deltaLink 值的一部分返回的 deltaToken 字符串。
skipToken 字符串 作为前一个同步响应中 @odata.nextLink 值的一部分返回的 skipToken 字符串。

备注

  • 在初始请求中指定 Prefer: odata.track-changes 时,如果响应支持同步,则响应将在标头中包括 Preference-applied: odata.track-changes
  • 如果你尝试同步不支持的资源,或者这不是初始同步请求,你将不会在响应中看到 Preference-applied 标头。
  • 为了缩短响应时间,请使用 $select 查询参数,以便只获取对你的应用场景有用的属性。
  • 你不能使用 $filter、$orderby、$search 和 $top 查询参数。

响应正文

  • 如果同步任务:集合中请求的 Task 对象。

  • 如果同步任务文件夹:集合中请求的 TaskFolder 对象。

对象数取决于 Prefer: odata.maxpagesize 请求标头中设置的值。

示例

下面显示了两组示例:

每个示例都显示初始同步请求和第二次同步请求。

  • 每个请求都指定 Prefer: odata.maxpagesize=1,以便一次只返回一个对象(分别为任务或任务文件夹)。
  • 初始响应返回一个同步的对象,deltaLinkdeltaToken
  • 第二次请求使用该 deltatoken。 第二个响应返回一个同步的对象,nextLinkskipToken

循环执行同步流程,并在下一个 GET 调用中使用前一个同步请求返回的 skipToken,直至获得包含 deltaLinkdeltaToken 的同步请求为止,如下所示:

"@odata.deltaLink": “https://outlook.office.com/api/v2.0/me/TaskFolders('AQMkAGMw80AAAIBEgAAAA==')/Tasks/?%24deltaToken=294a8f04cc0345c5ae093d484629e186”

如果发生这种情况,则此轮同步完成。 保存 deltaToken 供下一轮同步使用。

示例初始请求(同步任务)

    GET https://outlook.office.com/api/v2.0/me/TaskFolders('AQMkAGMwAAAIBEgAAAA==')/Tasks HTTP/1.1
    Prefer: odata.maxpagesize=1
  Prefer: odata.track-changes

初始响应数据示例(同步任务)

HTTP/1.1 200 OK
Preference-Applied: odata.track-changes

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#me/TaskFolders('AQMkAGMwAAAIBEgAAAA%3D%3D')/Tasks",
  "value": [
    {
      "@odata.id": "https://outlook.office.com/api/v2.0/Users('47ec4680-f443-4f9c-a3e5-f7660f0aceae@b4ffe6c0-e717-4104-acd1-e9dfe38ff5f9')/Tasks('AAMkAGMwQsKVevNAAAG1VNmAAA=')",
      "@odata.etag": "W/\"3JfzyLwJe0mPNcULClXrzQAABtYBDw==\"",
      "Id": "AAMkAGMwQsKVevNAAAG1VNmAAA=",
      "CreatedDateTime": "2016-02-29T20:51:25.2226052Z",
      "LastModifiedDateTime": "2016-02-29T20:51:25.2538576Z",
      "ChangeKey": "3JfzyLwJe0mPNcULClXrzQAABtYBDw==",
      "Categories": [ ],
      "AssignedTo": null,
      "Body": {
        "ContentType": "Text",
        "Content": ""
      },
      "CompletedDateTime": null,
      "DueDateTime": null,
      "HasAttachments":false,
      "Importance": "Normal",
      "IsReminderOn": false,
      "Owner": "Administrator",
      "ParentFolderId": "AQMkAGMwAAAIBEgAAAA==",
      "Recurrence": null,
      "ReminderDateTime": null,
      "Sensitivity": "Normal",
      "StartDateTime": null,
      "Status": "NotStarted",
      "Subject": "another task"
    }
  ],
  "@odata.deltaLink": "https://outlook.office.com/api/v2.0/me/TaskFolders('AQMkAGMwAAAIBEgAAAA==')/Tasks/?%24deltatoken=175e2e04482e431ea96e89145c212f8c"
}

第二次请求示例(同步任务)

    GET https://outlook.office.com/api/v2.0/me/TaskFolders('AQMkAGMwAAAIBEgAAAA==')/Tasks/?%24deltatoken=175e2e04482e431ea96e89145c212f8c HTTP/1.1
    Prefer: odata.maxpagesize=1
  Prefer: odata.track-changes

第二个响应数据示例(同步任务)

HTTP/1.1 200 OK

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#me/TaskFolders('AQMkAGMwAAAIBEgAAAA%3D%3D')/Tasks/$delta",
  "value": [
    {
      "@odata.id": "https://outlook.office.com/api/v2.0/Users('47ec4680-f443-4f9c-a3e5-f7660f0aceae@b4ffe6c0-e717-4104-acd1-e9dfe38ff5f9')/Tasks('AAMkAGMwQsKVevNAAAG1VNlAAA=')",
      "@odata.etag": "W/\"3JfzyLwJe0mPNcULClXrzQAABtYBDQ==\"",
      "Id": "AAMkAGMwQsKVevNAAAG1VNlAAA=",
      "CreatedDateTime": "2016-02-29T20:51:02.5955351Z",
      "LastModifiedDateTime": "2016-02-29T20:51:03.9703679Z",
      "ChangeKey": "3JfzyLwJe0mPNcULClXrzQAABtYBDQ==",
      "Categories": [ ],
      "AssignedTo": null,
      "Body": {
        "ContentType": "Text",
        "Content": ""
      },
      "CompletedDateTime": null,
      "DueDateTimeTime": null,
      "HasAttachments":false,
      "Importance": "Normal",
      "IsReminderOn": false,
      "Owner": "Administrator",
      "ParentFolderId": "AQMkAGMwAAAIBEgAAAA==",
      "Recurrence": null,
      "ReminderDateTime": null,
      "Sensitivity": "Normal",
      "StartDateTime": null,
      "Status": "NotStarted",
      "Subject": "another task"
    }
  ],
  "@odata.nextLink": "https://outlook.office.com/api/v2.0/me/TaskFolders('AQMkAGMw80AAAIBEgAAAA==')/Tasks/?%24skipToken=0fbce2031e844a2f9d13d8bee5ebe2c6"
}

继续同步任务,并在下一次 GET 调用中使用上一个响应的 @odata.nextLink 中返回的 skiptoken,直至最终响应包含 @odata.deltaLinkdeltaToken 为止。 保存 deltaToken 供下一轮同步使用。

初始请求示例(同步任务文件夹)

    GET https://outlook.office.com/api/v2.0/me/TaskFolders HTTP/1.1
    Prefer: odata.maxpagesize=1
    Prefer: odata.track-changes

初始响应数据示例(同步任务文件夹)

HTTP/1.1 200 OK
Preference-Applied: odata.track-changes

{
    "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#me/TaskFolders",
    "value": [
        {
            "@odata.id": "https://outlook.office.com/api/v2.0/Users('5bcd7334-a6c5-4f95-a370-319e077dfe10@e288a0d0-ab74-431b-9699-a3721aabb08f')/TaskFolders('AAMkAGJiAAAAAAESAAA=')",
            "Id": "AAMkAGJiAAAAAAESAAA=",
            "ChangeKey": "PG2a661l00Cy9qH3YxmDfwAAAAAAPA==",
            "Name": "Tasks",
            "IsDefaultFolder":true,
            "ParentGroupKey": "0006f0b7-0000-0000-c000-000000000046"
        }
    ],
    "@odata.deltaLink": "https://outlook.office.com/api/v2.0/me/TaskFolders/?%24deltatoken=OyZKBDxtmuutZdNAsvah92MZg38AAAAAZwkBAAAA"
}

第二次请求示例(同步任务文件夹)

    GET https://outlook.office.com/api/v2.0/me/TaskFolders/?%24deltatoken=OyZKBDxtmuutZdNAsvah92MZg38AAAAAZwkBAAAA HTTP/1.1
    Prefer: odata.maxpagesize=1
    Prefer: odata.track-changes

第二个响应数据示例(同步任务文件夹)

HTTP/1.1 200 OK

{
    "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#me/TaskFolders/$delta",
    "value": [
        {
            "@odata.id": "https://outlook.office.com/api/v2.0/Users('5bcd7334-a6c5-4f95-a370-319e077dfe10@e288a0d0-ab74-431b-9699-a3721aabb08f')/TaskFolders('AAMkAGI5AAAunDbWAAA=')",
            "Id": "AAMkAGI5AAAunDbWAAA=",
            "ChangeKey": "PmebZ1wYAUaTmrKkvU9LIQAALqEkaw==",
            "Name": "Bingo",
            "IsDefaultFolder":false,
            "ParentGroupKey": "db0823f2-93bd-4db6-8038-98bbc5f39a45"
        }
    ],
    "@odata.nextLink": "https://outlook.office.com/api/v2.0/me/TaskFolders/?%24skipToken=x_zCAz5nm2dcGAFGk5qypL1PSyEAAC6cRncCAAAA"
}

继续同步,并在下一次 GET 调用中使用上一个响应的 skiptoken 中返回的 @odata.nextLink,直至最终响应包含 @odata.deltaLinkdeltaToken 为止。 在此示例中,第三个请求返回 deltaToken,并且同步在这一轮完成。

第三次请求示例(同步任务文件夹)

    GET https://outlook.office.com/api/v2.0/me/TaskFolders/?%24skipToken=x_zCAz5nm2dcGAFGk5qypL1PSyEAAC6cRncCAAAA HTTP/1.1
    Prefer: odata.maxpagesize=1

第三个响应数据示例(同步任务文件夹)

HTTP/1.1 200 OK

{
    "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#me/TaskFolders/$delta",
    "value": [
        {
            "@odata.id": "https://outlook.office.com/api/v2.0/Users('5bcd7334-a6c5-4f95-a370-319e077dfe10@e288a0d0-ab74-431b-9699-a3721aabb08f')/TaskFolders('AAMkAGI5AAAunDbVAAA=')",
            "Id": "AAMkAGI5AAAunDbVAAA=",
            "ChangeKey": "PmebZ1wYAUaTmrKkvU9LIQAALqEkZA==",
            "Name":"Volunteer",
            "IsDefaultFolder":false,
            "ParentGroupKey": "db0823f2-93bd-4db6-8038-98bbc5f39a45"
        }
    ],
    "@odata.deltaLink":"https://outlook.office.com/api/v2.0/me/taskfolders/?%24deltaToken=x_zCBD5nm2dcGAFGk5qypL1PSyEAAC6cRncEAAAA"
}

获取附件

获取附件集合

最低要求的范围

从特定任务中获取附件。

GET https://outlook.office.com/api/v2.0/me/tasks('{task_id}')/attachments

响应类型

一个附件集合,其类型可以为 FileAttachmentItemAttachment

示例请求

以下示例返回指定任务的所有附件,其中包括文件和事件项。

GET https://outlook.office.com/api/v2.0/me/tasks('AAMkADNkN3qGAAA=')/attachments

示例响应

状态代码:200

{
    "@odata.context":"https://outlook.office.com/api/v2.0/$metadata#Me/Tasks('AAMkADNkN3qGAAA%3D')/Attachments",
    "value":[
        {
            "@odata.type":"#Microsoft.OutlookServices.FileAttachment",
            "@odata.id":"https://outlook.office.com/api/v2.0/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN3qGAAA=')/Attachments('AAMkADNkNRT6JOBs=')",
            "Id":"AAMkADNkNRT6JOBs=",
            "LastModifiedDateTime":"2016-11-22T02:24:21Z",
            "Name":"Holiday notice",
            "ContentType":"application/octet-stream",
            "Size":244,
            "IsInline":false,
            "ContentId":null,
            "ContentLocation":null,
            "ContentBytes":"bWFjIGFuZCBjaGVlc2U="
        },
        {
            "@odata.type":"#Microsoft.OutlookServices.ItemAttachment",
            "@odata.id":"https://outlook.office.com/api/v2.0/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkNS3qGAAA=')/Attachments('AAMkADNkNJVnQIe9r0=')",
            "Id":"AAMkADNkNJVnQIe9r0=",
            "LastModifiedDateTime":"2016-12-01T22:27:13Z",
            "Name":"Holiday event",
            "ContentType":null,
            "Size":2473,
            "IsInline":false
        }    
    ]
}

获取附件

最低要求的范围

获取特定任务的附件。

GET https://outlook.office.com/api/v2.0/me/tasks('{task_id}')/attachments('{attachment_id}')

响应类型

请求的文件附件项目附件

示例请求(文件附件)

以下示例获取特定任务的附件,该附件是一个文件附件。

GET https://outlook.office.com/api/v2.0/me/tasks('AAMkADNkN3qGAAA=')/attachments('AAMkADNkNRT6JOBs=')

示例响应

状态代码:200

{
    "@odata.context":"https://outlook.office.com/api/v2.0/$metadata#Me/Tasks('AAMkADNkN3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.FileAttachment",
    "@odata.id":"https://outlook.office.com/api/v2.0/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN3qGAAA=')/Attachments('AAMkADNkNRT6JOBs=')",
    "Id":"AAMkADNkNRT6JOBs=",
    "LastModifiedDateTime":"2016-11-22T02:24:21Z",
    "Name":"Holiday notice",
    "ContentType":"application/octet-stream",
    "Size":244,
    "IsInline":false,
    "ContentId":null,
    "ContentLocation":null,
    "ContentBytes":"bWFjIGFuZCBjaGVlc2U="
}

示例请求(项附件)

以下示例获取特定任务的附件,该任务是一个事件项。

GET https://outlook.office.com/api/v2.0/me/tasks('AAMkADNkNS3qGAAA=')/attachments('AAMkADNkNJVnQIe9r0=')

示例响应

状态代码:200

{
    "@odata.context":"https://outlook.office.com/api/v2.0/$metadata#Me/Tasks('AAMkADNkNS3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.ItemAttachment",
    "@odata.id":"https://outlook.office.com/api/v2.0/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkNS3qGAAA=')/Attachments('AAMkADNkNJVnQIe9r0=')",
    "Id":"AAMkADNkNJVnQIe9r0=",
    "LastModifiedDateTime":"2016-12-01T22:27:13Z",
    "Name":"Holiday event",
    "ContentType":null,
    "Size":2473,
    "IsInline":false
}

添加附件

你可以添加文件、项(消息、事件或联系人)或文件链接作为任务的附件。

添加文件附件

最低要求的范围

向任务中添加文件作为附件。

POST https://outlook.office.com/api/v2.0/me/tasks('{task_id}')/attachments
必需的正文参数 类型 说明
@odata.type 字符串 #Microsoft.OutlookServices.FileAttachment
Name 字符串 附件的名称。
ContentBytes 二进制 要附加的文件的内容(采用 base64 编码)。

响应类型

文件附件

示例请求

POST https://outlook.office.com/api/v2.0/me/tasks('AAMkADNkN3qGAAA=')/attachments
Content-Type: application/json

{
    "@odata.type": "#Microsoft.OutlookServices.FileAttachment"", 
    "Name": "Holiday notice", 
    "ContentBytes": "bWFjIGFuZCBjaGVlc2U="
}

示例响应

状态代码:201 已创建

{
    "@odata.context":"https://outlook.office.com/api/v2.0/$metadata#Me/Tasks('AAMkADNkN3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.FileAttachment",
    "@odata.id":"https://outlook.office.com/api/v2.0/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN3qGAAA=')/Attachments('AAMkADNkNRT6JOBs=')",
    "Id":"AAMkADNkNRT6JOBs=",
    "LastModifiedDateTime":"2016-11-22T02:24:21Z",
    "Name":"Holiday notice",
    "ContentType":"application/octet-stream",
    "Size":244,
    "IsInline":false,
    "ContentId":null,
    "ContentLocation":null,
    "ContentBytes":"bWFjIGFuZCBjaGVlc2U="
}

添加项附件

最低要求的范围

添加项(消息、事件或联系人)作为任务的附件。

POST https://outlook.office.com/api/v2.0/me/tasks('{task_id}')/attachments
必需的正文参数 类型 说明
@odata.type 字符串 #Microsoft.OutlookServices.ItemAttachment
Name 字符串 附件的名称。
Item 消息事件联系人条目。 要附加的项。

响应类型

项目附件

示例请求

POST https://outlook.office.com/api/v2.0/me/tasks('AAMkADNkN3qGAAA=')/attachments
Content-Type: application/json

{
    "@odata.type": "#Microsoft.OutlookServices.ItemAttachment", 
    "Name": "Holiday event", 
    "Item": {
        "@odata.type": "Microsoft.OutlookServices.Event",
        "Subject": "Discuss gifts for children",
        "Body": {
            "ContentType": "HTML",
            "Content": "Let's look for funding!"
         },
         "Start": {
             "DateTime": "2016-12-02T18:00:00",
             "TimeZone": "Pacific Standard Time"
          },
          "End": {
             "DateTime": "2016-12-02T19:00:00",
             "TimeZone": "Pacific Standard Time"
           }
    }
}

示例响应

状态代码:201 已创建

{
    "@odata.context":"https://outlook.office.com/api/v2.0/$metadata#Me/Tasks('AAMkADNkN3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.ItemAttachment",
    "@odata.id":"https://outlook.office.com/api/v2.0/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN23qGAAA=')/Attachments('AAMkADNkN2Jp5JVnQIe9r0=')",
    "Id":"AAMkADNkNJp5JVnQIe9r0=",
    "LastModifiedDateTime":"2016-12-01T22:27:13Z",
    "Name":"Holiday event",
    "ContentType":null,
    "Size":2473,
    "IsInline":false
}

添加引用附件

最低要求的范围

添加文件链接作为任务的引用附件。

POST https://outlook.office.com/api/v2.0/me/tasks('{task_id}')/attachments
必需的正文参数 类型 说明
@odata.type 字符串 #Microsoft.OutlookServices.ReferenceAttachment
Name 字符串 附件的显示名称。 必需。
SourceUrl 字符串 用于获取附件内容的 URL。 如果这是文件夹的 URL,为了使文件夹在 Outlook 或 Outlook 网页版中正确显示,请将 IsFolder 设置为 true。 必需。

在请求正文中指定 NameSourceUrl 参数以及任何可写的引用附件属性。

响应类型

引用附件

示例请求

以下示例将引用附件添加到现有任务。 附件是 OneDrive for Business 文件的链接。

POST https://outlook.office.com/api/v2.0/me/tasks('AAMkADNkN3qGAAA=')/attachments
Content-Type: application/json

{
    "@odata.type": "#Microsoft.OutlookServices.ReferenceAttachment", 
    "Name": "Hydrangea picture", 
    "SourceUrl": "https://contoso-my.sharepoint.com/personal/admin_contoso_onmicrosoft_com/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments%2FHydrangeas%2Ejpg&parent=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments", 
    "ProviderType": "oneDriveBusiness", 
    "Permission": "Edit", 
    "IsFolder": "False" 
}

示例响应

状态代码:201 已创建

{
    "@odata.context":"https://outlook.office.com/api/v2.0/$metadata#Me/Tasks('AAMkADNkN3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.ReferenceAttachment",
    "@odata.id":"https://outlook.office.com/api/v2.0/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN3qGAAA=')/Attachments('AAMkADNkNQG1Lnn5-o=')",
    "Id":"AAMkADNkNQG1Lnn5-o=",
    "LastModifiedDateTime":"2016-11-22T02:32:44Z",
    "Name":"Hydrangea picture",
    "ContentType":null,
    "Size":850,
    "IsInline":true,
    "SourceUrl":"https://contoso-my.sharepoint.com/personal/admin_contoso_onmicrosoft_com/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments%2FHydrangeas%2Ejpg&parent=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments",
    "ProviderType":"OneDriveBusiness",
    "ThumbnailUrl":null,
    "PreviewUrl":null,
    "Permission":"Edit",
    "IsFolder":false
}

删除附件

删除任务的附件

删除任务的附件

最低要求的范围

删除任务的指定附件。 附件可以是文件附件项附件

DELETE https://outlook.office.com/api/v2.0/me/tasks('{task_id}')/attachments('{attachment_id}')

示例请求

DELETE https:/outlook.office.com/api/v2.0/me/tasks('AAMkADNkN3qGAAA=')/attachments('AAMkADNkNQG1Lnn5-o=')

示例响应

Status code: 204

创建任务文件夹

最低要求的范围

创建任务文件夹。

你可以在用户邮箱的默认任务组 (My Tasks) 中创建任务文件夹:

POST https://outlook.office.com/api/v2.0/me/taskfolders

或者可以在指定任务组下创建任务文件夹:

POST https://outlook.office.com/api/v2.0/me/taskgroups('{group_id}')/taskfolders

在请求正文中,提供要创建的 TaskFolder 的 JSON 表示形式。

响应

成功状态代码:201 已创建

响应正文:创建的任务文件夹

示例请求

以下示例在用户邮箱的默认任务组 (My Tasks) 中创建一个名为 Volunteer 的任务文件夹。

POST https://outlook.office.com/api/v2.0/me/taskfolders 
Content-Type: application/json

{
  "Name": "Volunteer"
}

示例响应

Status code: 201

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/TaskFolders/$entity",
  "@odata.id": "https://outlook.office.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAhrbPWAAA=')",
  "Id": "AAMkADIyAAAhrbPWAAA=",
  "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAGig==",
  "IsDefaultFolder": false,
  "Name": "Volunteer",
  "ParentGroupKey": "0006f0b7-0000-0000-c000-000000000046"
}

示例请求

下一个示例在指定任务组中创建一个名为 Cooking 的任务文件夹。

POST https://outlook.office.com/api/v2.0/me/taskgroups('AAMkADIyAAAhrbe-AAA')/taskfolders 
Content-Type: application/json

{
  "Name": "Cooking"
}

示例响应

Status code: 201

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/TaskGroups('AAMkADIyAAAhrbe-AAA%3D')/TaskFolders/$entity",
  "@odata.id": "https://outlook.office.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAhrbPXAAA=')",
  "Id": "AAMkADIyAAAhrbPXAAA=",
  "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAOlA==",
  "IsDefaultFolder": false,
  "Name": "Cooking",
  "ParentGroupKey": "63d640cf-946f-4734-9c29-60dda7b76acb"
}

获取任务文件夹

最低要求的范围

获取多个任务文件夹。

你可以获取用户邮箱中的所有任务文件夹。

GET https://outlook.office.com/api/v2.0/me/taskfolders

或者可以获取指定任务组中的任务文件夹:

GET https://outlook.office365.com/api/v2.0/me/taskgroups('{group_id}')/taskfolders 

响应

成功状态代码:200 OK

响应正文:一个任务文件夹集合。

示例请求

以下示例获取用户邮箱中的所有任务文件夹。

GET https://outlook.office.com/api/v2.0/me/taskfolders

示例响应

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/TaskFolders",
  "value": [
    {
      "@odata.id": "https://outlook.office.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAAABrJAAA=')",
      "Id": "AAMkADIyAAAAABrJAAA=",
      "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAAAAeAA==",
      "IsDefaultFolder": false,
      "Name": "Monthly tasks",
      "ParentGroupKey": "0006f0b7-0000-0000-c000-000000000046"
    },
    {
      "@odata.id": "https://outlook.office.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAAAAESAAA=')",
      "Id": "AAMkADIyAAAAAAESAAA=",
      "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAAAAAPA==",
      "IsDefaultFolder": true,
      "Name": "Tasks",
      "ParentGroupKey": "0006f0b7-0000-0000-c000-000000000046"
    }
  ]
}

下一个示例获取指定任务组中的所有任务文件夹。

GET https://outlook.office365.com/api/v2.0/me/taskgroups('AAMkADIyAAAhrbe-AAA=')/taskfolders

示例响应

Status code: 200 OK

{
  "@odata.context": "https://outlook.office365.com/api/v2.0/$metadata#Me/TaskGroups('AAMkADIyAAAhrbe-AAA%3D')/TaskFolders",
  "value": [
    {
      "@odata.id": "https://outlook.office365.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAhrbPXAAA=')",
      "Id": "AAMkADIyAAAhrbPXAAA=",
      "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAOlA==",
      "IsDefaultFolder": false,
      "Name": "Cooking",
      "ParentGroupKey": "63d640cf-946f-4734-9c29-60dda7b76acb"
    }
  ]
}

更新任务文件夹

最低要求的范围

更新任务文件夹的可写属性。

你无法更改默认任务文件夹 TasksName 属性值。

任务文件夹 ID 在用户邮箱中是唯一的。

PATCH https://outlook.office.com/api/v2.0/me/taskfolders('{folder_id}')

在请求正文中,提供要在任务文件夹中更新的可写属性的 JSON 表示形式。

响应

成功状态代码:200 OK

响应正文:更新的任务文件夹

示例请求

以下示例将任务文件夹的名称更改为 Charity work

PATCH https://outlook.office.com/api/v2.0/me/taskfolders('AAMkADIyAAAhrbPWAAA=')
Content-Type: application/json

{
  "Name": "Charity work"
}

示例响应

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/TaskFolders/$entity",
  "@odata.id": "https://outlook.office.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAhrbPWAAA=')",
  "Id": "AAMkADIyAAAhrbPWAAA=",
  "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAKfQ==",
  "IsDefaultFolder": false,
  "Name": "Charity work",
  "ParentGroupKey": "0006f0b7-0000-0000-c000-000000000046"
}

删除任务文件夹

最低要求的范围

删除指定的任务文件夹。

试图删除默认任务文件夹 Tasks 会返回“HTTP 400 错误请求”。

DELETE https://outlook.office.com/api/v2.0/me/taskfolders('{folder_id}')

响应

成功状态代码:204 无内容

响应正文:无。

示例请求

DELETE https://outlook.office365.com/api/v2.0/me/taskfolders('AAMkADIyAAAhrbPXAAA=')

示例响应

Status code: 204

创建任务组

最低要求的范围

在用户的邮箱中创建任务组。

POST https://outlook.office.com/api/v2.0/me/taskgroups

在请求正文中,提供要创建的任务组的 JSON 表示形式。

响应

成功状态代码:201 已创建

响应正文:创建的任务组

示例请求

POST https://outlook.office.com/api/v2.0/me/taskgroups
Content-Type: application/json

{
  "Name": "Leisure tasks"
}

示例响应

Status code: 201

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/TaskGroups/$entity",
  "@odata.id": "https://outlook.office.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskGroups('AAMkADIyAAAhrbe-AAA=')",
  "Id": "AAMkADIyAAAhrbe-AAA=",
  "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAGjg==".
  "IsDefaultGroup": false,
  "Name": "Leisure tasks",
  "GroupKey": "63d640cf-946f-4734-9c29-60dda7b76acb"
}

获取任务组

最低要求的范围

获取用户的邮箱中的所有任务组。

响应始终包含默认任务组 My Tasks,以及在邮箱中创建的任何其他任务组。

GET https://outlook.office.com/api/v2.0/me/taskgroups

响应

成功状态代码:200 OK

响应正文:一个任务组集合。

示例请求

GET https://outlook.office.com/api/v2.0/me/taskgroups

示例响应

Status code: 200

{
  "@odata.context": "https://outlook.office365.com/api/v2.0/$metadata#Me/TaskGroups",
  "value": [
    {
      "@odata.id": "https://outlook.office365.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskGroups('AAMkADIyAAADJ5pYAAA=')",
      "Id": "AAMkADIyAAADJ5pYAAA=",
      "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAInHxLA==",
      "IsDefaultGroup": true,
      "Name": "My Tasks",
      "GroupKey": "0006f0b7-0000-0000-c000-000000000046"
    },
    {
      "@odata.id": "https://outlook.office365.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskGroups('AAMkADIyAAAhrbe-AAA=')",
      "Id": "AAMkADIyAAAhrbe-AAA=",
      "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAInHxKw==",
      "IsDefaultGroup": false,
      "Name": "Leisure Tasks",
      "GroupKey": "63d640cf-946f-4734-9c29-60dda7b76acb"
    }
  ]
}

更新任务组

最低要求的范围

更新任务组的可写属性。

PATCH https://outlook.office.com/api/v2.0/me/taskgroups('{group_id}')

在请求正文中,提供要在任务组中更新的可写属性的 JSON 表示形式, 例如 Name 属性。

响应

成功状态代码:200 OK

响应正文:更新的任务

示例请求

以下示例将任务组的名称更改为“个人任务”。 请注意,你无法修改默认任务组“我的任务”的名称。

PATCH https://outlook.office.com/api/v2.0/me/taskgroups('AAMkADIyAAAhrbe-AAA=')
Content-Type: application/json

{
  "Name": "Personal Tasks"
}

示例响应

Status code: 200 

{
  "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/TaskGroups/$entity",
  "@odata.id": "https://outlook.office.com/api/v2.0/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskGroups('AAMkADIyAAAhrbe-AAA=')",
  "Id": "AAMkADIyAAAhrbe-AAA=",
  "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAGjw==",
  "IsDefaultGroup": false,
  "Name": "Personal Tasks",
  "GroupKey": "63d640cf-946f-4734-9c29-60dda7b76acb"
}

删除任务组

最低要求的范围

删除指定的任务组。

试图删除默认任务组 My Tasks 会返回“HTTP 400 错误请求”。

DELETE https://outlook.office.com/api/v2.0/me/taskgroups('{group_id}')

响应

成功状态代码:204 无内容

响应正文:更新的任务

示例请求

DELETE https://outlook.office365.com/api/v2.0/me/taskgroups('AAMkADIyAAAhrbe-AAA=')

示例响应

Status code: 204

后续步骤

无论你准备开始构建应用还是只想了解更多信息,我们都已为你考虑周全。

或者,了解有关使用 Office 365 平台的更多信息: