email - 将 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);
}
}
解决方案
在创建附件之前尝试将流重置为开头
outputStream.Seek(0,SeekOrigin.Begin);
推荐阅读
- angular - Angular BehaviorSubject 事件多次发出
- python - 给定特定值,如何返回字典中的前一个键?
- html - 标签不会显示在单选按钮旁边
- typescript - 在 Typescript 中跨模块共享类型的最佳实践是什么?
- oculus - MRTK Gaze Provider Pointer 在 Oculus Rift 和 Touch 中消失
- django - Django如何将实例传递给查看
- c++ - 在 Windows 上使用 ReadDirectoryChangesW 丢失一些事件
- spring-cloud-gateway - 如何移除响应头,例如 Access-Control-Allow-Origin、Access-Control-Allow-Credentials
- ejabberd - Ejabberd Rest-api - Rest-API 调用上的 JSON 输入无效
- javascript - 如何在不使用js方法的情况下使用for循环从数组数组中删除项目?