繁体   English   中英

使用 MailKit 获取 MimeMessage 大小

[英]Get the MimeMessage size using MailKit

我的 SMTP 服务器限制了每个 smtpclient 会话可以发送的数据量以及其他一些约束。 例如,我想发送 10 条消息,但服务器可能会施加总共 10Mb 的限制。 我想计算消息的大小,以便知道何时需要重新初始化服务器连接。

我正在使用 MailKit 库来完成这项工作。

我正在考虑将包含附件的 Message.Body 写入 MemoryStream,但这似乎只是为了获得大小。

如果我有一个内存中的 MimeMessage 对象,是否有一种方法可以在发送之前确定其完整的内容长度?

- - - 更新 - - -

如果没有本机选项,这是我建议的方法:

using (var memory = new MemoryStream())
      {
         await mailMessage.Body.WriteToAsync(memory);
         curMessageLength = Convert.ToBase64String(memory.ToArray()).Length;
       }

你想要的可以这样做:

// Make sure to prepare the message for sending before you call
// SmtpClient.Send/Async() so that you are getting an accurate size.
mailMessage.Prepare (ContentEncoding.SevenBit);

using (var stream = new MimeKit.IO.MeasuringStream ())
{
    await mailMessage.WriteToAsync (stream);
    curMessageLength = stream.Length;
}

MimeKit 有一个方便的测量流,所以你不需要分配内存。

我很确定您还想测量整个消息内容(包括消息标题)。

我不明白您为什么对输出消息进行 base64 编码,但我怀疑您是否需要或想要这样做。

暂无
暂无

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

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