从电子邮件地址提取别名的有效方法

时间:2018-08-22 09:49:29

标签: c# alias email-address

我想从电子邮件地址中提取别名部分。例如,如果我有“ name+alias1+alias2+alias3@email.com”,我希望它返回一个子地址列表,在本例中为alias1,alias2,alias3。

我有提取第一个别名的代码,如下所示:

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];

但这不适用于多个地址。我也宁愿不使用正则表达式(由于“现在您有两个问题”)。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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();
    }
}

然后在您的代码中,您就可以打字

var addr = new MailAddress("name+alias@email.com");
var username = addr.User;
var domain = addr.Host;
var alias = addr.Alias();