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[] が侵害された可能性があるため、組み込み関数を使用して保存する前に 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 に答える