2012-05-21 130 views
0

我有以下代码行来将012地址添加到MailMessage实例。 (X的部分字符串中代表字母字符的占位符,以防止识别客户的。)意外的“无效的电子邮件地址格式”

message.To.Add("Xxxxxxxxx Xxxxxx Xxxxxxxxxx, Xxx. <[email protected]>"); 

而且我得到以下错误:

The specified string is not in the form required for an e-mail address

messageSystem.Net.Mail.MailMessage类型。我的理解是这种格式被接受。事实上,代码已经与其他地址一起工作。名称中的逗号或句号是否有可能违反格式?

编辑

所以这里是我迄今为止在正确的格式来构建的电子邮件地址。

// Construct a compound email address string 
public static string BuildEmailAddress(string name, string emailAddress) 
{ 
    if (String.IsNullOrWhiteSpace(name)) 
     return emailAddress; 
    name = Regex.Replace(name, @"[()<>\[\]:;@\\,.""]", 
     m => string.Format(@"\{0}", m.Value)); 
    return String.Format("\"{0}\" <{1}>", name, emailAddress); 
} 

这方面的内容仍不清楚。例如,如果雅虎遇到逗号,它只会将名称包装在双引号中,而不会打扰反斜杠。如果任何人都可以说什么时候需要引号和什么时候需要反斜杠,我欢迎任何建议。

+0

请列出发生的特殊字符。任何非ASCII符号,如äöüß? – skarmats

+0

逐个删除逗号和句点,看看它是否再次有效? –

+0

您的.NET版本也会很有用,因为可能通过版本 – skarmats

回答

2

我相信逗号是不允许的,因为它在技术上是RFC 822/2822中的列表分隔符。至少,我是这么读的。

+0

是的,正确的答案。如果显示名称部分包含任何特殊字符,则应该用引号引起来,所以我期望''“Fred Bloggs,esq。\”<[email protected]>“能够正常工作。 (我怀疑为了保证安全,始终将显示名称包含在引号中可能是一种很好的做法。) – LukeH

+0

使用Yahoo.com进行测试,它看起来像@LukeH所建议的那样。但是,对于开启和关闭括号,它实际上都是在反斜杠之前(并且不会加引号)。所以它看起来像我需要一个明确的参考,以确保它可靠地工作。 –

+0

@Jonathan:这些都在Joe提到的RFC中。例如,查看[RFC-822](http://www.ietf.org/rfc/rfc0822.txt)的第6部分或[RFC-2822](http://www.ietf。组织/ RFC/rfc2822.txt)。 – LukeH

相关问题