【问题标题】:MimeMessage.Load from Gmail API stream来自 Gmail API 流的 MimeMessage.Load
【发布时间】:2022-01-11 13:54:57
【问题描述】:

我们正在使用 .NET Core 3.1MimeKit 2.11.0Google.Apis.Gmail.v1 1.51.0.2251 获取 Gmail 邮件。我们希望以流的形式从 REST API 检索消息,然后将流传递给 MimeMessage.Load 方法。

我们定义了以下获取电子邮件的函数:

private Stream GetMessageDetails(string messageId, FormatEnum format)
{
    var req = gmailService.Users.Messages.Get("test@gmail.com", messageId);
    req.Format = format;
    return req.ExecuteAsStream();
}

然后我们这样称呼它:

using (var messageStream = GetMessageDetails("MESSAGE_ID", FormatEnum.Raw))
{
    MimeMessage mimeMsg = MimeMessage.Load(messageStream);
}

当我们运行上面的代码时,我们得到一个异常:

Failed to parse message headers.

我们尝试了FormatEnum.RawFormatEnum.Full,但遇到了同样的异常。我们如何使用MimeKit 加载消息而不先将整个消息加载到内存中?我们知道 base 64 解码消息的Raw 内容的方法,但它需要将整个消息加载到内存中,这不是我们想要的。

【问题讨论】:

    标签: c# gmail-api google-api-dotnet-client mimekit


    【解决方案1】:
    using (var rawStream = GetMessageDetails("MESSAGE_ID", FormatEnum.Raw))
    {
        using (var filtered = new FilteredStream(rawStream))
        {
            filtered.Add(DecoderFilter.Create(ContentEncoding.Base64));
    
            MimeMessage mimeMsg = MimeMessage.Load(filtered);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 2016-01-11
      • 2020-09-08
      • 2017-09-18
      • 2023-03-18
      • 1970-01-01
      • 2016-12-08
      • 2015-11-25
      • 2015-04-16
      相关资源
      最近更新 更多