Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么';当有逗号时,MailAddress是否引用DisplayName?_C#_.net 4.0 - Fatal编程技术网

C# 为什么';当有逗号时,MailAddress是否引用DisplayName?

C# 为什么';当有逗号时,MailAddress是否引用DisplayName?,c#,.net-4.0,C#,.net 4.0,我们最近从.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”。所有邮寄者都可以查看/阅读/等 在.NET 4

我们最近从.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”
。所有邮寄者都可以查看/阅读/等

在.NET 4中,Outlook/Exchange对其编码方式进行了调整,在逗号处将其拆分:
,CEO=C2=AE?=
,这会导致无法正确解码

:

逗号用于分隔邮件地址列表中的元素。作为一个 因此,不应在中的无引号显示名称中使用逗号 名单

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

MailAddress from = new MailAddress("joe@example.com", "\"Joe Smith, CEO®\"");
引用被删除是因为

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

那么,如何告诉MailAddress它不需要的逗号应该被引用,而不添加额外的空格(例如“\u200B\”Joe…\”),使地址在邮件阅读器中缩进

更新

Microsoft的回答(请参阅链接的回复评论):

微软于2011年8月17日发布——感谢您的支持 反馈这是一个众所周知的问题,目前正在开发修补程序 为.NET4.0创建。要获取修补程序,请与Microsoft联系 直接支持关于KB 2576045

没有测试,但尝试了一下

 MailAddress from = new MailAddress("joe@nospam.com", "Joe Smith\",\" CEO®");
编辑-另一个选项:

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

“(在提出这个问题时,没有任何实时数据受到损害)”->为什么人们不简单地使用。每个非示例地址都可能是、成为或曾经是有效地址。偏执狂程序员应该知道并尊重这一点。@phresnel感谢您的链接,但他没有意识到这一点。更新了我的帖子。差不多了!在outlook中看起来不错,Joe Smith,CEO…;在Gmail中看起来很笨拙,Joe Smith”,“CEO…不走运,我也试过了。任何逗号、Unicode或十六进制都会出现问题。如果MS有问题,请告诉用户使用“-”而不是“,“在显示名称中,或者只关心Outlook的收件人:-),我们将看到发生了什么。解决方法是执行
“\”Joe Smith,…\”
“\”Joe Smith,…\”
——额外的空间会使引号重新插入。