如何在字符串中获取电子邮件地址

本文关键字:获取 电子邮件地址 字符串 | 更新日期: 2023-09-27 18:00:27

我从Exchange 2003服务器和这些电子邮件中提取了许多电子邮件,试图确定哪些是反弹(无效),以便我可以将它们从我们的联系人中删除。

在反弹中搜索电子邮件正文以查找电子邮件地址的最有效方法是什么?

如何在字符串中获取电子邮件地址

您可能想看看这个页面,它有几种用于匹配电子邮件地址的正则表达式变体,并解释了选择每种正则表达式的权衡。在这里挑选之前,你绝对应该先读一读。

只需使用正则表达式。

'b[A-Z0-9._%+-]+@[A-Z0-9.-]+'.[A-Z]{2,4}'b

这是我们在许多电子邮件验证应用程序中使用的正则表达式;

public static bool CheckEmail(string email)
    {
        //validate Email
        Regex regex = new Regex(@"^([a-zA-Z0-9_'-'.'']+)@(('[[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'.)|(([a-zA-Z0-9'-]+'.)+))([a-zA-Z]{2,4}|[0-9]{1,3})$", RegexOptions.IgnoreCase);
        Match match = regex.Match(email);
        return match.Success;
    }

正确识别被退回的电子邮件,而不是自动回复或真实消息的实际过程有点复杂,但这至少会给你电子邮件地址。

我把这里的一些答案整理成这样。它实际上从字符串中返回每个电子邮件地址(有时邮件主机和目标地址会有倍数)。然后,我可以将每个电子邮件地址与我们发送的出站地址进行匹配,以进行验证。我使用@勒基的文章来更好地理解正则表达式,并修改了@Chris Bint 的代码

然而,我仍然想知道这是否是监控10000多封电子邮件的最快方式?有没有更有效的方法(同时仍然使用c#)?实时代码不会每次在循环中都重新创建Regex对象。

public static MatchCollection CheckEmail(string email)
{
  Regex regex = new Regex(@"'b[A-Z0-9._%+-]+@[A-Z0-9.-]+'.[A-Z]{2,4}'b", RegexOptions.IgnoreCase);          
  MatchCollection matches = regex.Matches(email);
  return matches;
}