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

ASP.NET生成Excel作为邮件附件发送时附件丢失问题求助

问题排查与修复方案

根因定位

你的代码出现该问题核心是邮件正文构造逻辑存在3个错误:

  • 构造好的带附件的邮件正文未赋值给message.Body:你先后创建了builder、emailBody两个BodyBuilder实例,生成了带附件的正文结构,但始终没有将该结构赋值给message的Body属性,最终发送时用的还是最开始错误构造的TextPart对象。
  • TextPart构造参数非法:TextPart的入参要求是MIME内容类型,合法值为"plain"(纯文本)、"html"(富文本),你填写的"HTML Table Exported Excel Attachment"属于非法内容类型,导致邮件客户端无法正确识别正文,将其误判为附件。
  • 冗余代码:重复创建两个BodyBuilder实例,属于无意义的冗余逻辑。

你生成Excel的代码逻辑是正常的,不需要修改。

修复后邮件发送代码

var message = new MimeMessage();
message.From.Add(new MailboxAddress("test project", "maazonuae@gmail.com"));
message.To.Add(new MailboxAddress("naren", "a.saaeed81@gmail.com"));
message.Subject = "test maazon";

// 单个BodyBuilder统一处理正文和附件
var bodyBuilder = new BodyBuilder();
// 设置纯文本正文,要HTML正文可以赋值HtmlBody属性
bodyBuilder.TextBody = "hello";
// 添加Excel附件
bodyBuilder.Attachments.Add("Customers.xlsx", bytes);

// 关键:将构造好的完整正文赋值给message
message.Body = bodyBuilder.ToMessageBody();

using (var client = new SmtpClient())
{
    client.Connect("smtp.gmail.com", 587, false);
    client.Authenticate("maazonuae@gmail.com", "maazonuae2021");
    client.Send(message);
    client.Disconnect(true);
}

额外注意事项

如果后续Gmail出现身份验证失败问题,需要开启Google账号的两步验证,然后生成应用专用密码替换此处的登录密码即可。


内容的提问来源于stack exchange,提问作者Ahmed Ismaiel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:06:05