C# 从Rabbit MQ以字节[]形式检索存储的电子邮件附件不';不要发送电子邮件

C# 从Rabbit MQ以字节[]形式检索存储的电子邮件附件不';不要发送电子邮件,c#,rabbitmq,email-attachments,C#,Rabbitmq,Email Attachments,我正在将svg对象转换为byte[],并将其存储在具有以下类的队列中 public class MailMessage { public string AttachmentName { get; set; } public byte[] Attachment { get; set; } } 然而,电子邮件从未被发送。我认为附件已损坏,因为如果我们跳过将附件添加到电子邮件中,那么它将发送正常 using (var stream = new MemoryStream(a

我正在将svg对象转换为byte[],并将其存储在具有以下类的队列中

public class MailMessage
{  
    public string AttachmentName { get; set; }    
    public byte[] Attachment { get; set; }
}
然而,电子邮件从未被发送。我认为附件已损坏,因为如果我们跳过将附件添加到电子邮件中,那么它将发送正常

using (var stream = new MemoryStream(attachment))
{
  var mailMessage = new MailMessage(this.from, new MailAddress(recipient)) { Subject = subject, Body = message };

  // this is the line which if commented out allows the email to be sent 
  mailMessage.Attachments.Add(new Attachment(stream, filename));

  MailSender().SendAsync(mailMessage, null);
}
一位同事建议,由于rabbit存储消息的方式,字节[]可能已被破坏,因此在使用内置函数存储之前对字节[]进行base64编码

Convert.ToBase64String(bytes)

Convert.FromBase64String(message.Attachment) // to retrieve
然而,这也不起作用

有人能想一想为什么这是失败的发送和思考任何解决办法


我正在考虑将图像存储在数据库中,并在发送电子邮件后将其删除,但这是最后一个资源。

问题在于
mailssender.sendaync()
。在发送邮件之前,
对象被释放

在这里不要使用“
使用
”。您正在立即销毁内存流 调用
SendAsync
后,例如,可能在SMTP读取之前 (因为它是异步的)

要么在回调中销毁流

使用
mailssender.Send()
而不是
mailssender.sendsync()
同步发送


这太简单了,令人沮丧。谢谢你的帮助