繁体   English   中英

有没有一种使用Gmail API读取邮件回复的方法

[英]Is there a way to read an reply of a mail using Gmail API

foreach (var part in emailInfoResponse.Result.Payload.Parts)
{
    if (part.Parts != null)
        foreach (var innerPart in part.Parts)
        {
            if (innerPart.MimeType == "text/plain")
            {
              body = innerPart.Body.Data;
            }
        }
}

我只阅读了主要邮件的正文。 它不是从分配给邮件的回复消息中获取数据,对我也能阅读邮件的回复有什么想法吗? 或者即使有办法只接受特定邮件的回复

要在对话中获取以后的消息/其他消息,您需要检索源线程:

String threadID = emailInfoResponse.Result.ThreadId;
Thread thread = service.Users.Threads.Get(userID, threadID).Execute();
foreach( var msg in thread.Messages )
{
    /* your code for each message */
}

根据Gmail邮件参考 ,如果邮件具有正确的标题和相同的主题,则它们可以共享threadId。 否则,它们将位于不同的电子邮件线程中。

您可能需要重构一点并从ThreadList开始。 这样,您可以找到与特定输入查询匹配的所有对话(仅查找与这些客户端列表相对应的消息):

  1. 将数据存储对象设置为Dictionary<String, Container> ,其中字符串是公司(来自电子邮件主题或任何地方),并且该容器可能只需要HashSet或类似的唯一值。
  2. 通过ThreadList页面
  3. 对于每个线程
  4. 翻页消息
  5. 对于每条消息,如果是第一条消息,请获取主题,即公司名称(所有消息必须在同一线程中共享一个主题)。
  6. 然后根据主题(公司名称)将客户端附加到数据存储对象。
  7. 根据需要从数据存储对象构造数据库记录。
public static MimeKit.MimeMessage Reply(MimeKit.MimeMessage message, bool replyToAll)
{
 var reply = new MimeKit.MimeMessage();
 if (message.ReplyTo.Count > 0)
  {
   reply.To.AddRange(message.ReplyTo);
  }
 else if (message.From.Count > 0)
  {
  reply.To.AddRange(message.From);
  }
  else if (message.Sender != null)
  {
  reply.To.Add(message.Sender);
  }
  if (replyToAll)
  {
  reply.To.AddRange(message.To);
  reply.Cc.AddRange(message.Cc);
  }
  if (!message.Subject.StartsWith("Re:", StringComparison.OrdinalIgnoreCase))
    reply.Subject = "Re:" + message.Subject;
  else
    reply.Subject = message.Subject;
  if (!string.IsNullOrEmpty(message.MessageId))
  {
    reply.InReplyTo = message.MessageId;
    foreach (var id in message.References)
      reply.References.Add(id);
      reply.References.Add(message.MessageId);
  }
  using (var quoted = new StringWriter())
  {
    var sender = message.Sender ?? message.From.Mailboxes.FirstOrDefault();
    quoted.WriteLine("On {0}, {1} wrote:", message.Date.ToString("f"), !string.IsNullOrEmpty(sender.Name) ? sender.Name : sender.Address);
    using (var reader = new StringReader(message.TextBody))
    {
      string line;
      while ((line = reader.ReadLine()) != null)
      {
        quoted.Write("> ");
        quoted.WriteLine(line);
      }
    }
    reply.Body = new MimeKit.TextPart("plain")
    {
      Text = quoted.ToString()
    };
  }
  return reply;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM