给定电子邮件地址:"Jim" <jim@example.com>
如果我尝试将其传递给MailAddress,我会收到以下异常:
指定的字符串不符合电子邮件地址的要求。
如何在C#中解析此地址为显示名称(Jim)和电子邮件地址(jim@example.com)?
编辑:我正在寻找解析它的C#代码。
编辑2:我发现由于电子邮件地址字符串开头有空格而导致MailAddress抛出异常。
给定电子邮件地址:"Jim" <jim@example.com>
如果我尝试将其传递给MailAddress,我会收到以下异常:
指定的字符串不符合电子邮件地址的要求。
如何在C#中解析此地址为显示名称(Jim)和电子邮件地址(jim@example.com)?
编辑:我正在寻找解析它的C#代码。
编辑2:我发现由于电子邮件地址字符串开头有空格而导致MailAddress抛出异常。
如果您想手动解析电子邮件地址,建议阅读RFC2822 (https://www.rfc-editor.org/rfc/rfc822.html#section-3.4)。第3.4节讨论了地址格式。
但是正确解析电子邮件地址并不容易,MailAddress
应该能够处理大多数场景。
根据 MailAddress
的MSDN文档:
http://msdn.microsoft.com/en-us/library/591bk9e8.aspx
它应该能够解析带有显示名称的地址。他们给出了一个例子: "Tom Smith <tsmith@contoso.com>"
。也许引号是问题所在?如果是这样,只需去掉引号并使用 MailAddress 解析其余部分即可。
string emailAddress = "\"Jim\" <jim@example.com>";
MailAddress address = new MailAddress(emailAddress.Replace("\"", ""));
如果可以避免的话,手动解析RFC2822格式并不值得麻烦。
MailAddress address = new MailAddress(emailAddress.Replace("\"", ""));
- Soph适用于我:
string s = "\"Jim\" <jim@example.com>";
System.Net.Mail.MailAddress a = new System.Net.Mail.MailAddress(s);
Debug.WriteLine("DisplayName: " + a.DisplayName);
Debug.WriteLine("Address: " + a.Address);
MailAddress类有一个私有方法,用于解析电子邮件地址。不确定它的质量如何,但我倾向于使用它而不是编写自己的方法。
尝试:
"Jimbo <jim@example.com>"
如果你正在使用MailKit(作为推荐),那么你可以使用MimeKit.MailboxAddress的Parse和TryParse方法。这是一个例子。
[Test]
public void Should_Parse_EmailAddress_With_Alias()
{
//Arrange
var expectedAlias = "Jim";
var expectedAddress = "jim@example.com";
string addressWithAlias = "\"Jim\" <jim@example.com>";
//Act
var mailboxAddressWithAlias = MimeKit.MailboxAddress.Parse(addressWithAlias);
//Assert
Assert.AreEqual(expectedAddress, mailboxAddressWithAlias.Address);
Assert.AreEqual(expectedAlias, mailboxAddressWithAlias.Name);
}
https://www.codeproject.com/Tips/1198601/Parsing-and-Decoding-Values-of-Some-Email-Message
string inputEmailString = "\"Jimbo\" <jim@example.com>";
string[] strSet = inputEmailString.Split('\"','<','>');
MailAddress mAddress = new MailAddress(strSet[0], strSet[2]);
我不用这种语言编程,但是我看到两个问题你可能需要检查:
1- 你不知道它被拒绝的确切原因。一个可能性是它有一个针对example.com的黑名单。
2- 你想要的真正解决方案可能是实现一个严格的验证器。Stack Overflow可能是开发这个的好地方,因为有很多有实际经验的人。
以下是你需要的几件事:
这是解决这个问题的最佳长期方法。
new MailAddress("jim@example.com", "Jimbo");
解析您提供的字符串:
string input = "\"Jimbo\" jim@example.com";
string[] pieces = input.Split(' ');
MailAddress ma = new MailAddress(pieces[1].Replace("<", string.Empty).Replace(">",string.Empty), pieces[0].Replace("\"", string.Empty));
如果您假设在两个单词之间始终有一个空格,那么您可以使用String.Split(' ')函数在空格处将其拆分,从而获得拆分后的部分数组。
所以大概可以像这样:
string str = "\"Jimbo\" jim@example.com"
string[] parts = str.Trim().Replace("\"","").Split(' ')
需要注意的一个问题是,如果显示名称中有空格,则它将在数组本身中分成2个或更多项,但电子邮件始终是最后一个。
编辑-您还可能需要编辑括号,只需用替换即可。