从电子邮件字符串获取主机.net core

xvw2m8pv  于 2023-02-10  发布在  .NET
关注(0)|答案(3)|浏览(110)

我需要从电子邮件地址字符串中获取主机。
在.net 4.x中我这样做了

var email1 = "test@test.com";
var email2 = "test2@yea.test.com"
var email1Host = new MailAddress(email1).Host;
var email2Host = new MailAddress(email2).Host;

电子邮件1主机打印“test.com“
电子邮件2主机打印“yea.test.com“
但是现在我只需要两个示例中的“test.com“部分。
.Net标准库1.6没有System .NET.Mail类,所以我不能再这样做了。
在.net core中完成同样的事情的另一种方法是什么,但我只需要test.com部分
我知道有一个System .NET.Mail-netcore nuget软件包,但是我真的不想为此安装一个nuget
编辑:抱歉,我忘了说我只需要test.com
要求提供更多示例
网站subdomain1.domain.co.uk=〉
网站subdomain1.subdomain2.domain.co.uk=〉
@subdomain1.subdomain2.domain.com=〉域名网
网站domain.co.uk=〉
@domain.com=〉域名网

2nc8po8w

2nc8po8w1#

使用字符串拆分和正则表达式,

var email1 = "test@test.com";
    var email2 = "test2@yea.test.co.uk";
    var email1Host = email1.Split('@')[1];
    var email2Host = email2.Split('@')[1];

    Regex regex = new Regex(@"[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$");
    Match match = regex.Match(email1Host);
    if (match.Success)
    {
        Console.WriteLine("Email Host1: "+match.Value);
    }

    match = regex.Match(email2Host);
    if (match.Success)
    {
        Console.WriteLine("Email Host2: "+match.Value);
    }

更新:使用regex获取域名

q3aa0525

q3aa05252#

另一种方法是使用System.Uri类并在电子邮件前面加上“mailto”。

class Program
{
    static void Main(string[] args)
    {

        string email = "test@test.com";
        string emailTwo = "test2@subdomain.host.com";

        Uri uri = new Uri($"mailto:{email}");
        Uri uriTwo = new Uri($"mailto:{emailTwo}");

        string emailOneHost = uri.Host;
        string emailTwoHost = uriTwo.Host;

        Console.WriteLine(emailOneHost); // test.com
        Console.WriteLine(emailTwoHost); // subdomain.host.com

        Console.ReadKey();
    }
}
brjng4g3

brjng4g33#

好吧,用一点C#就可以了:

string email = "test@test.com";
int indexOfAt = email.IndexOf('@');
//You do need to check the index is within the string
if (indexOfAt >= 0 && indexOfAt < email.Length - 1)
{
    string host = email.Substring(indexOfAt + 1);
}

相关问题