Mad*_*ing 4 .net c# database email attachment
有没有关于如何将数据库中的多个文件附加到.NET中的电子邮件的好例子?我有一个返回字节[]包含我在一个循环我打电话让每个附件Image列内容的方法,但我想知道是否有这样做的"正确" /最佳实践方法,尤其是有可能通过使用MemoryStreams来包含数据引入内存泄漏?我没事创建连接电子邮件的对象和附件列表中连接到它,一旦我有他们能做到这一点罚款单attachement但它似乎变得有多个文件稍微复杂一些.考虑到我不会认为这是一个不寻常的要求,似乎缺乏关于它的文章/帖子.
Thx - MH
这是如何进行的.假设您有一个从数据库加载的附件数组:
IEnumerable<byte[]> attachments = ... fetch from your database
Run Code Online (Sandbox Code Playgroud)
我们还可以安全地假设您连同这些附件一起加载了文件名,可能还有相应的MIME类型(您肯定必须保留的信息以及表示附件的字节数组).所以你可能已经获得了,IEnumerable<SomeAttachmentType>但这对于这篇文章来说并不重要.
所以现在你可以发送邮件:
using (var client = new SmtpClient("smtp.foo.com"))
using (var message = new MailMessage("from@foo.com", "to@bar.com"))
{
message.Subject = "test subject";
message.Body = "test body";
message.IsBodyHtml = false;
foreach (var attachment in attachments)
{
var attachmentStream = new MemoryStream(attachment);
// TODO: Choose a better name for your attachments and adapt the MIME type
var messageAttachment = new Attachment(attachmentStream, Guid.NewGuid().ToString(), "application/octet-stream");
message.Attachments.Add(messageAttachment);
}
client.Send(message);
}
Run Code Online (Sandbox Code Playgroud)
这是交易:
A MailMessage(IDisposable)包含多个Attachments(IDisposable).每个附件都引用一个MemoryStream(IDisposable).MailMessage包含在一个using中block,它确保调用其Dispose方法,然后调用所有附件的Dispose方法,后者又调用内存流的Dispose方法.