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

使用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);
    }
}

额外优化建议

  1. 可以同步把BodyEncoding也设置为Encoding.UTF8,确保邮件正文的特殊字符也能正常显示:
    mailMsg.BodyEncoding = Encoding.UTF8;
    
  2. 确认SMTP客户端配置指向正确的Office365服务器(smtp.office365.com,端口587,启用SSL),不过你测试账户正常,这一步大概率没问题。

这样修改后,专属账户发送的邮件主题里的特殊字符就能正常显示,不会再被替换成问号了。

内容的提问来源于stack exchange,提问作者kopieczek.dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:32:08