首页 > 解决方案 > 将 Excel 附加到 MailMessage C# 时,Excel 已损坏

问题描述

我创建了使用 EPPlus 库从 DataTable 生成 excel 文件的应用程序。然后我将 MemoryStream 实例添加到 Attachment。程序运行正常,我收到电子邮件,但是当我打开文件时,我收到错误“Excel 无法打开文件,因为文件格式或文件扩展名无效。验证文件没有损坏并且文件扩展名与格式匹配文件”。我尝试了很多在网络上发现的变体,但没有人提供帮助。可能有人知道如何解决此问题或以另一种方式发送带有附件的邮件按摩。

 public void SendMail(DataTable dt)
        {
            using (MemoryStream outputStream = new MemoryStream())
            using (ExcelPackage pck = new ExcelPackage(outputStream))
            {
                ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Sheet");
                ws.Cells.LoadFromDataTable(dt, true);
                pck.Save();          
                SmtpClient client = new SmtpClient("host");
                client.UseDefaultCredentials = false;
                client.Credentials = new NetworkCredential("usarename", "password");

                MailMessage message = new MailMessage("sender@gmail.com", "to@gmail.com");
                message.Body = "File in attachments";             

                Attachment at = new Attachment(outputStream, "FileOutput.xls", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
                message.Attachments.Add(at);
                message.Subject = "Test";
                client.Send(message);            

            }
        }

标签: emailc#attachment

解决方案


在创建附件之前尝试将流重置为开头

outputStream.Seek(0,SeekOrigin.Begin);

推荐阅读