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

如何在C#中使用OpenXml包创建Excel并解决邮件发送报错问题

问题排查与修复方案

你代码存在以下几处明显问题,按优先级修复即可:

  • 语法错误:代码里wbp.Workbook.sa是未完成的无效代码,直接删除这行即可,否则无法正常编译运行
  • 流位置错误:将Excel内容写入MemoryStream后,流的当前位置处于内容末尾,直接传入Attachment读取时会获取到空内容,需要在创建附件前将流位置重置为0
  • 附件格式不匹配:你用OpenXml生成的是标准XLSX格式Excel文件,不是CSV文件,附件名和MIME类型都配置错误,需要修改为对应XLSX的配置
  • SMTP配置缺失:Gmail的SMTP SSL端口为587,你未指定端口会导致连接失败;且当前Gmail不支持直接用账号登录密码发信,需要先开启账号两步验证,生成应用专用密码填入认证字段
  • 生成验证缺失:要确认Excel是否生成正常,只需要将内存流的字节数组写入本地磁盘,手动打开验证即可

修正后可运行代码

using System;
using System.IO;
using System.Net;
using System.Net.Mail;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

namespace CreatingExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            MemoryStream ms = new MemoryStream();
            MailMessage mail = new MailMessage();
            mail.To.Add("rohithajare01@gmail.com");
            mail.From = new MailAddress("rohithajare01@gmail.com");
            mail.Subject = "Test for lookupcode";
            try
            {
                // 生成Excel部分
                SpreadsheetDocument sd = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook);
                WorkbookPart wbp = sd.AddWorkbookPart();
                wbp.Workbook = new Workbook();
                WorksheetPart wsp = wbp.AddNewPart<WorksheetPart>();
                wsp.Worksheet = new Worksheet(new SheetData());
                Sheets sheets = sd.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

                Sheet sheet = new Sheet()
                {
                    Id = sd.WorkbookPart.GetIdOfPart(wsp),
                    SheetId = 1,
                    Name = "mySheet"
                };
                sheets.Append(sheet);
                wbp.Workbook.Save();
                sd.Close();

                // 验证Excel是否生成正常,取消注释即可将文件保存到本地查看
                // File.WriteAllBytes(@"C:\test.xlsx", ms.ToArray());

                // 重置流位置
                ms.Position = 0;

                // 附件改为正确的XLSX格式
                mail.Attachments.Add(new Attachment(ms, "test.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));

                // 配置SMTP
                var email = new SmtpClient();
                email.Host = "smtp.gmail.com";
                email.Port = 587; // 补充Gmail SMTP端口
                email.Credentials = new NetworkCredential("你的Gmail账号", "你的应用专用密码");
                email.EnableSsl = true;

                Console.WriteLine("Sending Email..");
                email.Send(mail);
                Console.WriteLine("Email sent");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Rohit Hajare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:15:02