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

Effective way of extracting alias from email address

我想从电子邮件地址中提取别名部分。例如,如果我有 "name+alias1+alias2+alias3@email.com",我希望它成为 return 子地址列表,在本例中为 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];

但这不适用于多个地址。我也不想使用正则表达式(由于 "now you have two problems")。

诀窍是使用 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();
    }
}

然后在你的代码中,你可以写

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