使用SendGrid发送纯文本邮件异常:C#发送后含HTML标签
嘿,这个问题我之前也碰到过!其实核心就是你可能没彻底把邮件的内容类型锁死在纯文本上,或者不小心留了HTML相关的设置。我给你一步步拆解解决方法:
1. 用System.Net.Mail时,彻底锁定纯文本模式
如果你用的是.NET传统的System.Net.Mail库,一定要确保这两个关键设置:
- 只给
MailMessage.Body赋值纯文本内容 - 把
IsBodyHtml显式设为false(默认其实是false,但如果之前碰过HTML相关属性,可能被覆盖)
给你一个干净的控制台示例代码:
using System.Net; using System.Net.Mail; var fromAddr = new MailAddress("your-email@domain.com", "你的名字"); var toAddr = new MailAddress("recipient@domain.com", "收件人名字"); const string password = "你的邮箱授权码"; // 注意别用明文密码,建议用配置文件 const string subject = "纯文本邮件测试"; const string plainTextBody = "这是纯文本内容,没有任何HTML标签,换行\n就用普通换行符!"; var smtpClient = new SmtpClient { Host = "smtp.domain.com", // 比如smtp.gmail.com Port = 587, EnableSsl = true, Credentials = new NetworkCredential(fromAddr.Address, password), UseDefaultCredentials = false }; using var mailMsg = new MailMessage(fromAddr, toAddr) { Subject = subject, Body = plainTextBody, IsBodyHtml = false // 这行是关键!别漏 }; smtpClient.Send(mailMsg);
2. 检查是否不小心添加了HTML备用视图
如果你的代码里曾经用过AlternateViews.Add(...)来添加HTML版本的内容,哪怕后来设置了纯文本,邮件依然会是multipart/alternative类型(同时包含纯文本和HTML),客户端可能优先显示HTML。这种情况要彻底移除所有HTML相关的AlternateViews,确保邮件只有纯文本部分。
3. 用现代库MailKit的正确姿势
如果你转用更推荐的MailKit库(比System.Net.Mail更稳定),要直接创建TextPart("plain"),不要碰HTML相关的部分:
using MimeKit; using MailKit.Net.Smtp; var msg = new MimeMessage(); msg.From.Add(new MailboxAddress("你的名字", "your-email@domain.com")); msg.To.Add(new MailboxAddress("收件人名字", "recipient@domain.com")); msg.Subject = "纯文本邮件测试"; // 只添加纯文本内容,完全不涉及HTML msg.Body = new TextPart("plain") { Text = "纯文本内容示例,这里的所有字符都会原样显示,不会被解析成HTML!" }; using var client = new SmtpClient(); client.Connect("smtp.domain.com", 587, true); client.Authenticate("your-email@domain.com", password); client.Send(msg); client.Disconnect(true);
4. 验证结果
发送后查看邮件源代码,确认Content-Type是text/plain; charset=utf-8(类似这样),而不是text/html或者multipart/alternative。如果是后者,说明代码里还是混进了HTML内容,需要再检查一遍。
按这个思路调整后,邮件就会是纯纯的文本格式,不会出现HTML标签啦!
内容的提问来源于stack exchange,提问作者Paul Michaels
相关产品推荐
相关产品推荐

