【问题标题】:Unexpected 'Invalid Email Address Format'意外的“无效的电子邮件地址格式”
【发布时间】:2012-05-28 10:31:30
【问题描述】:

我有以下代码行来向MailMessage 实例添加一个收件人地址。 (字符串中的 X 代表字母字符的占位符,以防止识别客户。)

message.To.Add("Xxxxxxxxx Xxxxxx Xxxxxxxxxx, Xxx. <xxxxxx@xxxxxxxxx-xx.com>");

我收到以下错误:

指定的字符串不是电子邮件地址所需的格式

message 的类型为 System.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);
}

其中的要素仍不清楚。例如,如果 Yahoo 遇到逗号,它只是将名称用双引号括起来,而不用反斜杠。如果有人能说出何时需要引号以及何时需要反斜杠,我会欢迎任何建议。

【问题讨论】:

  • 请列出出现的特殊字符。任何非 ASCII 符号,如 äöüß?
  • 把逗号和句号一个一个去掉,看看还能不能用?
  • 您的 .NET 版本也很有用,因为可能已经通过这些版本进行了修复
  • @skarmats:没有那样的事。所有普通的旧常规美国英文字母字符(如图所示)。我们正在使用 .NET 4。
  • @EricJ.: 好的,我接下来试试。希望获得更多见解,因为如果不允许某些字符,我需要一个完整的列表。

标签: .net email-validation mailmessage


【解决方案1】:

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

【讨论】:

  • 是的,正确答案。如果显示名称部分包含任何特殊字符,则应将其括在引号中,因此我希望 "\"Fred Bloggs, esq.\" &lt;fred.bloggs@somewhere.test&gt;" 能够正常工作。 (我怀疑为了安全起见,总是将显示名称用引号括起来可能是一种好习惯。)
  • 用 Yahoo.com 进行测试,它似乎做了类似@LukeH 建议的事情。但是,对于左括号和右括号,它实际上在它们之前加上反斜杠(并且不添加引号)。所以看起来我需要一个明确的参考来确保它可靠地工作。
  • @Jonathan:Joe 提到的 RFC 中都有。例如,查看RFC-822 的第 6 节或RFC-2822 的第 3.4 节。
  • @LukeH:是的,我一直在看,谢谢。但我注意到,对于像逗号这样的字符,像 Yahoo 这样的软件只是将名称用双引号括起来,而像括号这样的字符前面是反斜杠。我不清楚这两种方式中应该处理哪些字符,并且这些链接似乎没有回答这个问题。
猜你喜欢
  • 1970-01-01
  • 2022-08-21
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 2017-01-10
  • 2013-02-28
相关资源
最近更新 更多