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

使用C# SmtpClient发邮件时Gmail波斯文显示为问号的问题求助

波斯文邮件主题显示问号的可能原因
  • 数据库存储字段类型错误:如果SQL Server中存储主题/内容的字段用的是varchar类型,而非nvarchar/ntext这类Unicode类型,波斯文这类非拉丁字符在存储时就会被截断或转成问号。varchar基于单字节编码,无法正确保存Unicode字符,必须用支持双字节的nvarchar类型存储。

  • 数据库读取阶段编码丢失:读取数据时如果没有以Unicode方式处理,比如使用了非Unicode的读取方法,或者ORM框架将字段映射为非Unicode字符串类型,会导致取出的字符串已经是损坏的问号(C#的string本身是Unicode,但读取过程的错误转码会破坏数据)。

  • 邮件编码设置不完整:仅设置SubjectEncoding = Encoding.UTF8可能不够,还需要确保:

    • MailMessage.BodyEncoding也设为Encoding.UTF8(如果邮件内容包含波斯文)
    • MailMessage.HeadersEncoding设为Encoding.UTF8,邮件头部(包括主题)的编码标识需要统一,避免客户端解析混乱
  • 主题编码未按邮件标准处理:部分邮件客户端(比如Gmail)对主题的Unicode编码要求严格,需要遵循RFC 2047规范编码主题。可以手动将主题编码为符合标准的格式,示例代码:

    string subject = "دسترسی محدود به تقویم گوگل";
    byte[] subjectBytes = Encoding.UTF8.GetBytes(subject);
    string encodedSubject = $"=?UTF-8?B?{Convert.ToBase64String(subjectBytes)}?=";
    mailMessage.Subject = encodedSubject;
    

    这种方式明确告诉邮件客户端主题的编码格式,避免自动转码出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:17:06