Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从电子邮件地址中提取别名的有效方法_C#_Alias_Email Address - Fatal编程技术网

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

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;

我想从电子邮件地址中提取别名部分。例如,如果我有“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 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,这非常简单和明显。这非常简单和明显。