【问题标题】:Get messages which contain an attachment via gmail API通过 gmail API 获取包含附件的消息
【发布时间】:2020-05-16 15:20:27
【问题描述】:

我正在构建一个基于 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);
}

【问题讨论】:

    标签: c# .net gmail-api


    【解决方案1】:

    我认为更简单的解决方案是在 Users.messages.list 端点中进行查询,而无需创建过滤器。

    您实际上可以使用参数q 进行查询,就像在GMail 搜索框中一样,如果不熟悉您可以查看at the whole list of operators

    其实有一个例子可以利用这个查询参数in the documentation

    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";
    

    在执行请求之前,这样做不会为您的帐户创建一个完整的过滤器,因此可能对您的情况更方便。

    【讨论】:

    • 可以下载每个附件吗?
    【解决方案2】:

    使用具有类似条件的过滤器 => criteria.query="has:attachment"

    参见此处 => https://developers.google.com/gmail/api/v1/reference/users/settings/filters#resource

    要测试任何过滤器,您可以使用 GMail: image

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-07
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多