Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 将Excel附加到MailMessage C时已损坏#_Email_C#_Attachment - Fatal编程技术网

Email 将Excel附加到MailMessage C时已损坏#

Email 将Excel附加到MailMessage C时已损坏#,email,c#,attachment,Email,C#,Attachment,我创建了一个应用程序,它使用EPPlus库从DataTable生成excel文件。然后我将MemoryStream实例添加到附件中。程序运行正常,我收到电子邮件,但当我打开文件时,我收到一个错误“Excel无法打开文件,因为文件格式或文件扩展名无效。请验证文件是否已损坏,以及文件扩展名是否与文件格式匹配”。 我尝试了很多在网络上发现的变体,但没人帮忙。也许有人知道如何解决这个问题,或者如何发送带有附件的邮件信息 public void SendMail(DataTable dt)

我创建了一个应用程序,它使用EPPlus库从DataTable生成excel文件。然后我将MemoryStream实例添加到附件中。程序运行正常,我收到电子邮件,但当我打开文件时,我收到一个错误“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);            

            }
        }

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

outputStream.Seek(0,SeekOrigin.Begin);

您使用的是ePlus,但创建的附件扩展名为.xls。为什么?EPPlus无法创建.xls文件。它只能执行.xlsx,这是一种不同的格式。修好你的分机,如果这解决了你的问题,请告诉我。@mason不工作。我正在使用ExchangeService,一切正常。您是否将我的答案与SilentTremor的答案结合起来?您是否尝试在服务器上本地保存该文件以确保获得有效的Excel文件?