列出邮件
本文内容
命名空间:microsoft.graph
重要
Microsoft Graph版本下的 /beta API 可能会发生更改。 不支持在生产应用程序中使用这些 API。 若要确定 API 是否在 v1.0 中可用,请使用 版本 选择器。
获取登录用户的邮箱(包括“已删除邮件”和“待筛选邮件”文件夹)中的邮件。
根据页面大小和邮箱数据,从邮箱中获取邮件可能会引发多个请求。 默认页面大小为 10 封邮件。 使用 $top 以自定义页面大小(范围在 1 - 1000 之间)。
若要改进操作响应时间,请使用 $select 指定所需的精确属性;请参阅下方 示例 1 。 微调 $select 和 $top 的值,尤其在必须使用较大的页面大小时,因为返回带有数百条邮件(且每条邮件都有完整的响应有效负载) 的页面可能触发 网关超时 (HTTP 504)。
若要获取下一页的邮件,只需将 @odata.nextLink 中返回的整个 URL 应用于下一个 get-messages 请求。 此 URL 包括可能已在初始请求中指定的任何查询参数。
不要尝试从 @odata.nextLink URL 中提取 $skip 值来操纵响应。 此 API 使用 $skip 值来保留其已在用户邮箱中遍历的所有项的计数,以返回 message-type 项的页面。 因此,甚至在初始响应中,$skip 值都会大于页面大小。 有关详细信息,请参阅在应用中对 Microsoft Graph 数据进行分页 。
可以筛选这些消息,并仅获取包含 已 登录用户提及的消息。 请参阅以下示例 。 默认情况下 GET /me/messages ,该操作不会返回 提及 属性。 $expand使用查询参数查找邮件中每个提及的详细信息 。
在以下两种情况下,应用可以获取其他用户的邮件文件夹中的邮件:
如果该应用具有应用程序权限,或者
如果应用具有来自某个用户的相应委派权限 ,而另一个用户与该用户共享了邮件文件夹,或者已为该用户授予委派的访问权限。请参阅详细信息和示例 。
注意 :请注意 已知问题 ,即此操作在自己的响应中包含 Microsoft Teams 聊天消息。
权限
要调用此 API,需要以下权限之一。要了解详细信息,包括如何选择权限的信息,请参阅权限 。
权限类型
权限(从最低特权到最高特权)
委派(工作或学校帐户)
Mail.ReadBasic、Mail.Read、Mail.ReadWrite
委派(个人 Microsoft 帐户)
Mail.ReadBasic、Mail.Read、Mail.ReadWrite
应用程序
Mail.ReadBasic.All、Mail.Read、Mail.ReadWrite
HTTP 请求
若要获取用户邮箱中的所有邮件,请执行以下操作:
GET /me/messages
GET /users/{id | userPrincipalName}/messages
若要获取用户邮箱中特定文件夹中的邮件,请执行以下操作:
GET /me/mailFolders/{id}/messages
GET /users/{id | userPrincipalName}/mailFolders/{id}/messages
若要获取用户邮箱中包含 用户提及 的所有邮件,请执行以下操作:
GET /me/messages?$filter=mentionsPreview/isMentioned eq true
GET /users/{id | userPrincipalName}/messages?$filter=mentionsPreview/isMentioned eq true
可选的查询参数
此方法支持 OData 查询参数 来帮助自定义响应。
可以使用 $filter mentionsPreview 属性上的查询参数来获取那些提及已登录用户的消息。
在同一查询中使用 filter 和 orderby
在同一查询中使用 $filter 和 $orderby 获取消息时,请确保按以下方式指定属性:
$orderby 中显示的属性也必须在 $filter 中显示。
$orderby 中显示的属性与 $filter 中属性的顺序相同。
$orderby 中存在的属性显示在 $filter 中不存在的任意属性之前。
无法进行此项操作时会导致下列错误:
错误代码:InefficientFilter
错误消息:The restriction or sort order is too complex for this operation.
名称
类型
说明
Authorization
string
Bearer {token}。必需。
Prefer: outlook.body-content-type
string
要返回的 body 和 uniqueBody 属性的格式。 可取值为“text”或“html”。 如果未指定此头,采用 HTML 格式返回 body 和 uniqueBody 属性。 可选。
请求正文
请勿提供此方法的请求正文。
响应
如果成功,此方法将返回 200 OK 响应正文中 的消息 对象的响应代码和集合。
示例
示例 1:列出所有邮件
请求
第一个示例获取已登录用户邮箱中的默认前 10 条邮件。 它使用 $select 在响应中返回每封邮件的属性的子集。
GET https://graph.microsoft.com/beta/me/messages?$select=sender,subject
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var messages = await graphClient.Me.Messages
.Request()
.Select("sender,subject")
.GetAsync();
const options = {
authProvider,
};
const client = Client.init(options);
let messages = await client.api('/me/messages')
.version('beta')
.select('sender,subject')
.get();
MSHTTPClient *httpClient = [MSClientFactory createHTTPClientWithAuthenticationProvider:authenticationProvider];
NSString *MSGraphBaseURL = @"https://graph.microsoft.com/beta/";
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[MSGraphBaseURL stringByAppendingString:@"/me/messages?$select=sender,subject"]]];
[urlRequest setHTTPMethod:@"GET"];
MSURLSessionDataTask *meDataTask = [httpClient dataTaskWithRequest:urlRequest
completionHandler: ^(NSData *data, NSURLResponse *response, NSError *nserror) {
NSError *jsonError = nil;
MSCollection *collection = [[MSCollection alloc] initWithData:data error:&jsonError];
MSGraphMessage *message = [[MSGraphMessage alloc] initWithDictionary:[[collection value] objectAtIndex: 0] error:&nserror];
}];
[meDataTask execute];
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
MessageCollectionPage messages = graphClient.me().messages()
.buildRequest()
.select("sender,subject")
.get();
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestParameters := &msgraphsdk.MessagesRequestBuilderGetQueryParameters{
Select: "sender,subject",
}
options := &msgraphsdk.MessagesRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
result, err := graphClient.Me().Messages().GetWithRequestConfigurationAndResponseHandler(options, nil)
Import-Module Microsoft.Graph.Mail
# A UPN can also be used as -UserId.
Get-MgUserMessage -UserId $userId -Property "sender,subject"
响应
下面展示了示例响应。 若要获取下一页邮件,请将 @odata.nextLink 中返回的 URL 应用 于后续 GET 请求。
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#users('bb8775a4-4d8c-42cf-a1d4-4d58c2bb668f')/messages(sender,subject)",
"value": [
{
"@odata.etag": "W/\"CQAAABYAAADHcgC8Hl9tRZ/hc1wEUs1TAAAwR4Hg\"",
"id": "AAMkAGUAAAwTW09AAA=",
"subject": "You have late tasks!",
"sender": {
"emailAddress": {
"name": "Microsoft Planner",
"address": "noreply@Planner.Office365.com"
}
}
}
]
}
示例 2:使用$filter获取满足特定条件的所有消息
请求
下一个示例筛选已登录用户邮箱中提及该用户的所有邮件。 它还用于 $select 返回响应中每个消息的属性的子集。
下面的示例还合并了查询参数字符串中空格字符的 URL 编码。
GET https://graph.microsoft.com/beta/me/messages?$filter=MentionsPreview/IsMentioned%20eq%20true&$select=Subject,Sender,ReceivedDateTime,MentionsPreview
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var messages = await graphClient.Me.Messages
.Request()
.Filter("MentionsPreview/IsMentioned eq true")
.Select("subject,sender,receivedDateTime,mentionsPreview")
.GetAsync();
const options = {
authProvider,
};
const client = Client.init(options);
let messages = await client.api('/me/messages')
.version('beta')
.filter('MentionsPreview/IsMentioned eq true')
.select('subject,sender,receivedDateTime,mentionsPreview')
.get();
MSHTTPClient *httpClient = [MSClientFactory createHTTPClientWithAuthenticationProvider:authenticationProvider];
NSString *MSGraphBaseURL = @"https://graph.microsoft.com/beta/";
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[MSGraphBaseURL stringByAppendingString:@"/me/messages?$filter=MentionsPreview/IsMentioned%20eq%20true&$select=Subject,Sender,ReceivedDateTime,MentionsPreview"]]];
[urlRequest setHTTPMethod:@"GET"];
MSURLSessionDataTask *meDataTask = [httpClient dataTaskWithRequest:urlRequest
completionHandler: ^(NSData *data, NSURLResponse *response, NSError *nserror) {
NSError *jsonError = nil;
MSCollection *collection = [[MSCollection alloc] initWithData:data error:&jsonError];
MSGraphMessage *message = [[MSGraphMessage alloc] initWithDictionary:[[collection value] objectAtIndex: 0] error:&nserror];
}];
[meDataTask execute];
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
MessageCollectionPage messages = graphClient.me().messages()
.buildRequest()
.filter("MentionsPreview/IsMentioned eq true")
.select("subject,sender,receivedDateTime,mentionsPreview")
.get();
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestParameters := &msgraphsdk.MessagesRequestBuilderGetQueryParameters{
Filter: "MentionsPreview/IsMentioned%20eq%20true",
Select: "Subject,Sender,ReceivedDateTime,MentionsPreview",
}
options := &msgraphsdk.MessagesRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
result, err := graphClient.Me().Messages().GetWithRequestConfigurationAndResponseHandler(options, nil)
Import-Module Microsoft.Graph.Mail
# A UPN can also be used as -UserId.
Get-MgUserMessage -UserId $userId -Filter "MentionsPreview/IsMentioned eq true" -Property "Subject,Sender,ReceivedDateTime,MentionsPreview"
响应
下面展示了示例响应。
注意: 为了提高可读性,可能缩短了此处显示的响应对象。
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context":"https://graph.microsoft.com/beta/$metadata#me/messages(subject,sender,receivedDateTime,mentionsPreview)",
"value":[
{
"@odata.id":"https://graph.microsoft.com/beta/users('266efe5a-0fd7-4edd-877b-b2d1e561f193@ae01a323-3934-4475-a32d-af1274312bb0')/messages('AQMkADJmMTUAAAgVZAAAA')",
"@odata.etag":"W/\"CQAAABYAAAAPFhK2FclcRbABBJhCde8iAAAAAATI\"",
"id":"AQMkADJmMTUAAAgVZAAAA",
"receivedDateTime":"2016-07-21T07:40:21Z",
"subject":"Re: Start planning soon",
"sender":{
"emailAddress":{
"name":"Adele Vance",
"address":"AdeleV@contoso.com"
}
},
"mentionsPreview":{
"isMentioned":true
}
}
]
}
示例 3:使用首选标头获取消息正文,uniqueBody 为文本格式
请求
第三个 Prefer: outlook.body-content-type="text" 示例演示如何使用标头以文本格式获取每条消息的 正文 和 uniqueBody 属性。
GET https://graph.microsoft.com/beta/me/messages?$select=subject,body,bodyPreview,uniqueBody
Prefer: outlook.body-content-type="text"
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var messages = await graphClient.Me.Messages
.Request()
.Header("Prefer","outlook.body-content-type=\"text\"")
.Select("subject,body,bodyPreview,uniqueBody")
.GetAsync();
const options = {
authProvider,
};
const client = Client.init(options);
let messages = await client.api('/me/messages')
.version('beta')
.header('Prefer','outlook.body-content-type="text"')
.select('subject,body,bodyPreview,uniqueBody')
.get();
MSHTTPClient *httpClient = [MSClientFactory createHTTPClientWithAuthenticationProvider:authenticationProvider];
NSString *MSGraphBaseURL = @"https://graph.microsoft.com/beta/";
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[MSGraphBaseURL stringByAppendingString:@"/me/messages?$select=subject,body,bodyPreview,uniqueBody"]]];
[urlRequest setHTTPMethod:@"GET"];
[urlRequest setValue:@"outlook.body-content-type=\"text\"" forHTTPHeaderField:@"Prefer"];
MSURLSessionDataTask *meDataTask = [httpClient dataTaskWithRequest:urlRequest
completionHandler: ^(NSData *data, NSURLResponse *response, NSError *nserror) {
NSError *jsonError = nil;
MSCollection *collection = [[MSCollection alloc] initWithData:data error:&jsonError];
MSGraphMessage *message = [[MSGraphMessage alloc] initWithDictionary:[[collection value] objectAtIndex: 0] error:&nserror];
}];
[meDataTask execute];
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
LinkedList<Option> requestOptions = new LinkedList<Option>();
requestOptions.add(new HeaderOption("Prefer", "outlook.body-content-type=\"text\""));
MessageCollectionPage messages = graphClient.me().messages()
.buildRequest( requestOptions )
.select("subject,body,bodyPreview,uniqueBody")
.get();
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestParameters := &msgraphsdk.MessagesRequestBuilderGetQueryParameters{
Select: "subject,body,bodyPreview,uniqueBody",
}
headers := map[string]string{
"Prefer": "outlook.body-content-type="text""
}
options := &msgraphsdk.MessagesRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
Headers: headers,
}
result, err := graphClient.Me().Messages().GetWithRequestConfigurationAndResponseHandler(options, nil)
Import-Module Microsoft.Graph.Mail
# A UPN can also be used as -UserId.
Get-MgUserMessage -UserId $userId -Property "subject,body,bodyPreview,uniqueBody"
响应
下面展示了示例响应。
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context":"https://graph.microsoft.com/beta/$metadata#users('cd209b0b-3f83-4c35-82d2-d88a61820480')/messages(subject,body,bodyPreview,uniqueBody)",
"value":[
{
"@odata.type":"#microsoft.graph.eventMessageRequest",
"@odata.etag":"W/\"CwAAABYAAABmWdbhEgBXTophjCWt81m9AAAoZYj5\"",
"id":"AAMkAGIAAAoZCfIAAA=",
"subject":"Orientation ",
"bodyPreview":"Dana, this is the time you selected for our orientation. Please bring the notes I sent you.",
"body":{
"contentType":"text",
"content":"Dana, this is the time you selected for our orientation. Please bring the notes I sent you.\r\n"
},
"uniqueBody":{
"contentType":"text",
"content":"Dana, this is the time you selected for our orientation. Please bring the notes I sent you.\r\n"
}
}
]
}