我在玩 MailKit/MimeKit,有些东西困扰着我。我想使用流发送带有附件的电子邮件。MimeKit 提供的BodyBuilder
类使得创建正文消息和附加文件变得非常容易:
public void SendEmail(string body, Stream attachment, string fileName)
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress("Carl", "carl@site.com"));
message.To.Add(new MailboxAddress("Rick", "rick@site.com"));
message.Subject = "Things got messy...?";
var builder = new BodyBuilder();
builder.TextBody = body;
builder.Attachments.Add(fileName, attachment);
message.Body = builder.ToMessageBody();
using (var client = new SmtpClient())
{
// code to send e-mail here...
}
}
我在代码的其他地方生成流并且我没有关闭它,所以我可以将它传递给 MimeKit。不清楚的是:MimeKit 是否处理流?基本上(据我所知)消费者通常负责处理 Streams。我也知道在 MemoryStream (我基本上正在使用)上调用 dispose 不会释放任何资源..但会阻止读取/写入它。但是,如果将来实现更改为另一种类型的 Stream,事情会变得更加复杂。
我还深入研究了 MikeKit 源代码,发现传入的 StreamAttachmentCollection.Add
被“添加”到了MemoryBlockStream
从 Stream 继承的 a 中(并实现了 Dispose),所以我假设它被释放了,但在这一点上,我只是猜测。
有任何想法吗?