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