C# MVC 6邮件附件无法打开问题求助
解决MVC 6中邮件附件无法打开的问题
你的问题出在用StreamReader处理二进制文件流——PDF、Excel、图片这类都是二进制格式,StreamReader是用来读取文本的,强行把二进制转成字符串再转回字节,会彻底破坏原始文件的字节结构,导致附件损坏无法打开。
直接修改附件处理逻辑,跳过文本转换步骤,直接操作二进制流即可:
bool fileFound = false; using (MailMessage mail = new MailMessage()) { var from = new MailAddress("****.com", "notification Order"); mail.Subject = Subject; string header = Body; string footer = ""; // 你原代码未赋值,记得补全内容 mail.Body = header + footer; if (Request.Form.Files.Count > 0) { var files = Request.Form.Files; foreach (var data in files) { fileFound = true; if (data.Length > 0) { string filename = Path.GetFileName(data.FileName); // 直接复制上传文件的原始流到MemoryStream,保留二进制数据 using (var stream2 = new MemoryStream()) { data.CopyTo(stream2); // 重置流指针到开头,确保附件能读取完整内容 stream2.Position = 0; mail.Attachments.Add(new Attachment(stream2, filename)); } } } } mail.IsBodyHtml = true; mail.From = from; // 补充发送邮件的SmtpClient相关逻辑(原代码缺失部分) }
关键修改说明
- 移除所有
StreamReader、字符串转字节的错误逻辑,直接对二进制流操作 - 使用
IFormFile.CopyTo()完整保留上传文件的原始二进制数据 - 添加
stream2.Position = 0,因为流复制完成后指针停在末尾,重置后才能让Attachment正确读取整个流
内容的提问来源于stack exchange,提问作者Baba Ranjith
相关产品推荐
相关产品推荐

