C# 从电子邮件地址中提取别名的有效方法
我想从电子邮件地址中提取别名部分。例如,如果我有“name+alias1+alias2”+alias3@email.com,我希望它返回子地址列表,在本例中为别名1、别名2、别名3 我有提取第一个别名的代码,如下所示:C# 从电子邮件地址中提取别名的有效方法,c#,alias,email-address,C#,Alias,Email Address,我想从电子邮件地址中提取别名部分。例如,如果我有“name+alias1+alias2”+alias3@email.com,我希望它返回子地址列表,在本例中为别名1、别名2、别名3 我有提取第一个别名的代码,如下所示: var addr = new MailAddress("name+alias@email.com"); var username = addr.User; var domain = addr.Host; if (!username.Contains("+")) return;
var addr = new MailAddress("name+alias@email.com");
var username = addr.User;
var domain = addr.Host;
if (!username.Contains("+")) return;
var split = username.Split('+').ToList();
var name = split[0];
var alias = split[1];
但这不适用于多个地址。我也不想使用正则表达式(因为“现在你有两个问题”)。诀窍是使用Linq获取除第一个别名外的所有别名,该别名对应于以下名称:
var addr = new MailAddress("name+alias@email.com");
var username = addr.User;
var domain = addr.Host;
if (!username.Contains("+")) return;
var split = username.Split('+').ToList();
var name = split[0];
var alias = split.Skip(1);
诀窍是使用Linq获取除与名称对应的第一个别名之外的所有别名:
var addr = new MailAddress("name+alias@email.com");
var username = addr.User;
var domain = addr.Host;
if (!username.Contains("+")) return;
var split = username.Split('+').ToList();
var name = split[0];
var alias = split.Skip(1);
如果您打算大量重用它,我建议您编写一个扩展方法来检索别名列表。 因为@mnieto已经发布了一个带有split的解决方案,所以我想在这里使用Regex
public static class MailAddressExtension
{
private static Regex AliasRegex = new Regex(@"\+([A-Za-z0-9]+)");
public static List<string> Alias(this MailAddress mail)
{
return AliasRegex.Matches(mail.User).Select(a => a.Groups[1].Value).ToList();
}
}
如果您打算大量重用它,我建议您编写一个扩展方法来检索别名列表。 因为@mnieto已经发布了一个带有split的解决方案,所以我想在这里使用Regex
public static class MailAddressExtension
{
private static Regex AliasRegex = new Regex(@"\+([A-Za-z0-9]+)");
public static List<string> Alias(this MailAddress mail)
{
return AliasRegex.Matches(mail.User).Select(a => a.Groups[1].Value).ToList();
}
}
如果电子邮件地址是
name@email.com
?@mjwills根据RFC 5233,只允许一个加号,因此不应将其视为有效的电子邮件地址。不管标准文档怎么说,gmail允许一个电子邮件地址中有两个+
。因此,对于name+alias的输入,您希望返回什么可能是值得考虑的+alias2@email.com
。非常好。我自己刚测试过,效果不错,我会编辑我的问题。你可以使用split或RegexWhat如果电子邮件地址是name@email.com
?@mjwills根据RFC 5233,只允许一个加号,因此不应将其视为有效的电子邮件地址。不管标准文档怎么说,gmail允许一个电子邮件地址中有两个+
。因此,对于name+alias的输入,您希望返回什么可能是值得考虑的+alias2@email.com
。非常好。我自己测试了一下,效果很好,我将编辑我的问题。你可以使用split或RegexThat,这非常简单和明显。这非常简单和明显。