gpt4 book ai didi

c# - 从 .NET 中的数据库图像列将多个文件附加到电子邮件

转载 作者:太空狗 更新时间:2023-10-30 00:27:15 25 4
gpt4 key购买 nike

在 .NET 中,是否有任何很好的示例说明如何将数据库中的多个文件附加到电子邮件?我有一个返回 Byte[] 的方法,其中包含我在循环中调用以获取每个附件的图像列内容,但我想知道是否有这样做的“正确”/最佳实践方法,尤其是是否有可能通过使用 MemoryStreams 来包含数据而引入内存泄漏?我很好地创建了 en 电子邮件对象并将附件列表附加到它,一旦我得到它们并且可以用单个附件完成这项工作但它似乎变得稍微复杂一些多个文件。考虑到我不会认为这是一个不寻常的要求,因此似乎缺乏关于它的文章/帖子。

谢谢 - MH

最佳答案

这是如何进行的。假设您有一组从数据库中加载的附件:

IEnumerable<byte[]> attachments = ... fetch from your database

我们还可以安全地假设,连同那些附件,您已经加载了文件名和可能它们相应的 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);
}

这是交易:

A MailMessage (IDisposable) 包含多个 Attachments (我是一次性的)。每个附件都引用了一个 MemoryStream (我是一次性的)。 MailMessage 包裹在一个使用 block 中这确保将调用其 Dispose 方法,该方法又调用所有附件的 Dispose 方法,而所有附件又调用内存流的 Dispose 方法。

关于c# - 从 .NET 中的数据库图像列将多个文件附加到电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com