如何设置 MailMessage 标头的字符集和编码(例如 To、From、Subject)?
Posted
技术标签:
【中文标题】如何设置 MailMessage 标头的字符集和编码(例如 To、From、Subject)?【英文标题】:How to set both charset and encoding for MailMessage header (e.g. To, From, Subject)? 【发布时间】:2014-02-12 05:51:59 【问题描述】:参考MIME Encoded-word syntax on wikipedia:
=?charset?encoding?encoded text?=
我想为我的MailAddress.DisplayName
、MailMessage.Subject
等指定字符集和编码。
例如:
字符集 ISO-2022-JP 与 Q 编码:=?iso-2022-jp?Q?=5B=1B=24B=21A=1B=28B=5D=5B=1B=24B=21B=1B=28B=5D?=
使用 Base64 编码的字符集 ISO-2022-JP:=?ISO-2022-JP?B?WxskQiFBGyhCXVs=?=
当前的 .NET 框架实现似乎不允许这种灵活性。与编码相关的属性(如MailMessage.SubjectEncoding
)映射到MIME charset,没有办法指定MIME 编码。 MIME 编码由框架设置,如下所示:
如果 MailMessage.SubjectEncoding 设置为 UTF-8(默认), UTF-32、Unicode 或 BigEndianUnicode 且主题包含非 ASCII 字符,那么它将以 Base64 编码。否则会 编码在引用打印。 (来源:Microsoft Connect)
如果无法使用 MailMessage 类,还有其他方法可以实现吗?
【问题讨论】:
【参考方案1】:对于 System.Net.Mail 没有办法,但您可以使用像 MimeKit 这样的库。
在 MimeKit 中,您可以为任何标题指定字符集,但它有自己的逻辑来选择要使用的适当编码,因为几乎没有人关心到想要自己设置它。有一个非常简单的数学公式可以决定最有效的编码算法,因此通常没有必要重写它。
但是,如果您真的需要/想要覆盖它,因为 MimeKit 是完全开源的,您可以只修改源代码。
【讨论】:
以上是关于如何设置 MailMessage 标头的字符集和编码(例如 To、From、Subject)?的主要内容,如果未能解决你的问题,请参考以下文章
MailMessage 将字符串作为正文发送,在 Outlook 中没有换行符