为什么'当有逗号时,MailAddress不引用DisplayName ?

本文关键字:MailAddress 引用 DisplayName 为什么 | 更新日期: 2023-09-27 18:05:48

我们最近从。net 2迁移到。net 4, System.Net.Mail.MailAddress类让我很头疼。以前,如果我有一个电子邮件(joe@example.com)和一个显示名(Joe Smith, CEO®),你可以这样做:

MailAddress from = new MailAddress("joe@example.com", "Joe Smith, CEO®");

当你通过电子邮件发送时,你会得到一个正确格式的"Joe Smith, CEO" <joe@example.com>。这是可见的/可读的/等等。

在。net 4中,Outlook/Exchange对如何编码进行了调整,将其分割为逗号:<=?utf-8?Q?Joe@gwm.example.com>, CEO=C2=AE?= <joe@example.com>,导致无法正确解码。

微软:

逗号用于分隔邮件地址列表中的元素。作为一个中的未加引号的显示名称中不应使用逗号列表。

这很好,但是当你这样做的时候:

MailAddress from = new MailAddress("joe@example.com", "'"Joe Smith, CEO®'"");

省略了引号,因为;

此方法删除未显示的周围引号DisplayName属性。

那么如何告诉MailAddress不需要的逗号应该加引号,而不添加额外的空格(例如"'u200B'"Joe…'"),这会使地址在邮件阅读器中缩进?

微软的回答(见回复评论链接):

微软发布于2011年8月17日——谢谢你的反馈。这是一个众所周知的问题,目前正在进行补丁为。net 4.0创建的。如需获取补丁,请联系微软直接支持KB 2576045

为什么'当有逗号时,MailAddress不引用DisplayName ?

没有测试,但尝试

 MailAddress from = new MailAddress("joe@nospam.com", "Joe Smith'",'" CEO®");

EDIT -另一个选项:

 MailAddress from = new MailAddress("joe@nospam.com", "Joe Smith'x2C CEO®");