0

我将 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);
}

一位同事建议 byte[] 可能由于 rabbit 存储消息的方式而受到损害,因此在使用内置函数存储之前对 byte[] 进行 base64 编码

Convert.ToBase64String(bytes)

Convert.FromBase64String(message.Attachment) // to retrieve

然而,这也没有奏效。

谁能想到为什么这无法发送并想到任何解决方法。

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

4

1 回答 1

1

问题在于MailSender.SendAsync(). 该stream对象在发送邮件之前被处置。

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

在回调中销毁您的流。

或者

使用MailSender.Send()而不是MailSender.SendAsync()同步发送。

请参阅此以获取更多详细信息

于 2012-05-23T08:53:53.510 回答