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
相关产品推荐
相关产品推荐

