Получать сообщения, содержащие вложение, через API Gmail - PullRequest
0 голосов
/ 31 января 2020

Я создаю приложение на основе Gmail API. Я вижу все сообщения из текущего почтового ящика, но мне нужно ограничить это только сообщениями, которые имеют вложения. Как я могу это сделать?

Это мой GoogleController.cs:

[HttpGet]
[Authorize]
public async Task<IActionResult> GetListEmail(string LabelId, string nameLabel)
{
    string UserEmail = User.FindFirst(c => c.Type == ClaimTypes.Email).Value;
    var service = GetService();
    List<My_Message> listMessages = new List<My_Message>();
    List<Message> result = new List<Message>();
    var emailListRequest = service.Users.Messages.List(UserEmail);
    emailListRequest.LabelIds = LabelId;
    emailListRequest.IncludeSpamTrash = false;
    emailListRequest.MaxResults = 1000;
    var emailListResponse = await emailListRequest.ExecuteAsync();

    if (emailListResponse != null && emailListResponse.Messages != null)
    {
        foreach (var email in emailListResponse.Messages)
        {
            var emailInfoRequest = service.Users.Messages.Get(UserEmail, email.Id);
            var emailInfoResponse = await emailInfoRequest.ExecuteAsync();
            if (emailInfoResponse != null)
            {
                My_Message message = new My_Message();
                message.Id = listMessages.Count + 1;
                message.EmailId = email.Id;
                foreach (var mParts in emailInfoResponse.Payload.Headers)
                {
                    if (mParts.Name == "Date")
                        message.Date_Received = mParts.Value;
                    else if (mParts.Name == "From")
                        message.From = mParts.Value;
                    else if (mParts.Name == "Subject")
                        message.Title = mParts.Value;
                }
                listMessages.Add(message);
            }
        }
    }
    ViewBag.Message = nameLabel;
    return View("~/Views/Home/Index.cshtml", listMessages);
}

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Я думаю, что более простым решением будет запрос в конечной точке 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";

, прежде чем выполнить запрос, подобное действие не создаст целый фильтр для вашей учетной записи, поэтому, возможно, это будет более удобно для вашего случая.

0 голосов
/ 31 января 2020

используйте фильтр с такими критериями, как этот => crit.query = "has: attachment"

см. Также здесь => https://developers.google.com/gmail/api/v1/reference/users/settings/filters#resource

Для тестирования любого фильтра вы можете использовать GMail: image

...