Я думаю, что более простым решением будет запрос в конечной точке Users.messages.list
без необходимости создания фильтров.
На самом деле вы можете использовать параметр q
, чтобы сделать запрос, как в окне поиска GMail, если вы не знакомы, вы можете посмотреть на весь список операторов .
Фактически, есть пример использования этого параметра запроса в документации :
using Google.Apis.Gmail.v1;
using Google.Apis.Gmail.v1.Data;
using System.Collections.Generic;
// ...
public class MyClass {
// ...
/// <summary>
/// List all Messages of the user's mailbox matching the query.
/// </summary>
/// <param name="service">Gmail API service instance.</param>
/// <param name="userId">User's email address. The special value "me"
/// can be used to indicate the authenticated user.</param>
/// <param name="query">String used to filter Messages returned.</param>
public static List<Message> ListMessages(GmailService service, String userId, String query)
{
List<Message> result = new List<Message>();
UsersResource.MessagesResource.ListRequest request = service.Users.Messages.List(userId);
request.Q = query; // inform this with the right query
do
{
try
{
ListMessagesResponse response = request.Execute();
result.AddRange(response.Messages);
request.PageToken = response.NextPageToken;
}
catch (Exception e)
{
Console.WriteLine("An error occurred: " + e.Message);
}
} while (!String.IsNullOrEmpty(request.PageToken));
return result;
}
// ...
}
Так что для вашего случая вам просто нужно добавить строку
emailListRequest.Q = "has:attachment";
, прежде чем выполнить запрос, подобное действие не создаст целый фильтр для вашей учетной записи, поэтому, возможно, это будет более удобно для вашего случая.