来自 Gmail API 流的 MimeMessage.Load

Posted

技术标签:

【中文标题】来自 Gmail API 流的 MimeMessage.Load【英文标题】:MimeMessage.Load from Gmail API stream 【发布时间】: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 内容的方法,但它需要将整个消息加载到内存中,这不是我们想要的。

【问题讨论】:

【参考方案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);
    

【讨论】:

以上是关于来自 Gmail API 流的 MimeMessage.Load的主要内容,如果未能解决你的问题,请参考以下文章

如何使用来自 postmnan 本机应用程序的 gmail rest api 发送邮件

尝试通过 API 删除 gmail 邮件时出现 401 错误

从 gmail api 在 Web 应用程序中显示电子邮件

使用 IMAP(javamail API)从 gmail 访问电子邮件

Gmail API .NET:如何向一位发件人请求邮件

我也想获取邮件 Gmail API 附带的附件