来自 Gmail API 流的 MimeMessage.Load
Posted
技术标签:
【中文标题】来自 Gmail API 流的 MimeMessage.Load【英文标题】:MimeMessage.Load from Gmail API stream 【发布时间】:2022-01-11 13:54:57 【问题描述】:我们正在使用 .NET Core 3.1
、MimeKit 2.11.0
和 Google.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.Raw
和FormatEnum.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 错误