使用Office365专用账户通过smtp.office365.com发邮件时主题编码异常求助
解决Office365专属账户邮件主题特殊字符变为"?"的问题
我之前处理过好几起类似的Office365专属租户邮件编码问题,你的情况很典型——测试环境正常,但专属账户下特殊字符被替换成问号,核心问题出在邮件主题的编码没有显式指定。
问题根源
默认情况下,MailMessage的SubjectEncoding会使用ASCII编码,这会导致所有非ASCII的特殊字符(比如你例子里的żółćąź)被替换为"?"。公共测试账户的SMTP服务器可能会自动帮你处理编码兼容,但Office365的专属租户通常要求显式声明编码类型,否则就会触发严格的ASCII过滤。
修复方案
只需要在你的代码中添加一行,显式设置主题的编码为UTF-8即可。修改后的代码如下:
using (var mailMsg = new MailMessage(sender, recipient)) { mailMsg.IsBodyHtml = true; // 显式设置主题编码为UTF-8,解决特殊字符被替换的问题 mailMsg.SubjectEncoding = Encoding.UTF8; mailMsg.Subject = "Hello world żółćąź"; mailMsg.Body = body; using (var smtpClient = new SmtpClient()) { smtpClient.Credentials = new NetworkCredential("email", "password..."); // 补充发送邮件的核心代码,原示例中遗漏了这一步 smtpClient.Send(mailMsg); } }
额外优化建议
- 可以同步把
BodyEncoding也设置为Encoding.UTF8,确保邮件正文的特殊字符也能正常显示:mailMsg.BodyEncoding = Encoding.UTF8; - 确认SMTP客户端配置指向正确的Office365服务器(
smtp.office365.com,端口587,启用SSL),不过你测试账户正常,这一步大概率没问题。
这样修改后,专属账户发送的邮件主题里的特殊字符就能正常显示,不会再被替换成问号了。
内容的提问来源于stack exchange,提问作者kopieczek.dev
相关产品推荐
相关产品推荐

