You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:15:40