MemoryStream流不支持读取



得到了一个MemoryStream,它被用作电子邮件的附件。SmtpClient。SendMessageCallback导致异常"流不支持读取"。可能出了什么问题?谢谢你的帮助!简化代码:

public Stream GetMemoryStream()
{
...
var ms = new MemoryStream(fileBytes)
{
Position = 0
};
return ms;
} 
public void MailWithAttachment()
{
using (Stream ms = GetMemoryStream())
{
ms.Position = 0;
await MailAttachment(ms, "myPicture.jpg");
}
}
public Task MailAttachment(Stream stream, string fileName)
{
...
System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Image.Jpeg);
System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(stream, ct);
attachment.ContentDisposition.FileName = fileName;
mail.Attachments.Add(attachment);
...
await client.SendMailAsync(mail);
}

你的代码不是始终"异步"的并且编译器会给你一个关于在非async的方法中使用await的警告/错误。

您需要使MailWithAttachmentMailAttachmentasync,然后正确使用await。例如:

public async Task MailWithAttachment()
{
using (Stream ms = GetMemoryStream())
{
ms.Position = 0;
await MailAttachment(ms, "myPicture.jpg");
}
}
public async Task MailAttachment(Stream stream, string fileName)
{
...
System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Image.Jpeg);
System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(stream, ct);
attachment.ContentDisposition.FileName = fileName;
mail.Attachments.Add(attachment);
...
await client.SendMailAsync(mail);
}

最新更新