【问题标题】:How do you get an email address within a string如何在字符串中获取电子邮件地址
【发布时间】:2011-09-21 12:31:52
【问题描述】:

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

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

【问题讨论】:

  • 高效在什么意义上?在速度方面?准确度?
  • 速度大于准确性。所有客户都是美国(字母有限)。我看过这里stackoverflow.com/questions/1028553/…,但这是一个 PHP 答案,我不确定在空格上拆分 C# 字符串(可能很慢)。正则表达式是要走的路吗?
  • 可能是一个正则表达式。你有一些示例文本吗?
  • 示例文本无处不在。有些是系统管理员消息,有些是特定于电子邮件接收者的。因此,来自任何主机的任意消息。如果正文中有一封电子邮件(我不在乎它是什么),我会将该电子邮件与发送的电子邮件进行匹配,并假设它是坏的。
  • 正则表达式不适用于电子邮件地址。他们是very hard to get right

标签: c# string email


【解决方案1】:

您可能想查看this page,它有多个用于匹配电子邮件地址的正则表达式变体,并解释了选择每个的权衡取舍。在这里选择之前,您绝对应该阅读它。

【讨论】:

    【解决方案2】:

    只需使用正则表达式。

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

    【讨论】:

      【解决方案3】:

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

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

      正确识别退回的电子邮件而不是自动回复或真实邮件的实际过程要复杂一些,但这至少会为您提供电子邮件地址。

      【讨论】:

      • 我正在开发规则,然后评估“非托管”电子邮件以创建更多规则。真正的回复在“发件人”中有他们的电子邮件,我可以将其与我们发送的人匹配。但是正则表达式非常有帮助。我已经很久不用接触正则表达式了。
      • 我会警惕“真实”回复在发件人地址中有电子邮件的假设,根据经验,情况并非如此。我们实际上使用了一个商业程序来扫描每封电子邮件并为每封电子邮件分配一个类别,同时执行一个存储过程将它们直接插入我们的数据库。既好又简单,省去了我自己编写规则的麻烦。
      【解决方案4】:

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

      但是,我仍然想知道这是否是监控 10,000 多封电子邮件的最快方法?有没有更有效的方法(同时仍然使用 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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2017-10-10
        • 1970-01-01
        • 2019-12-26
        • 2014-01-11
        • 2018-10-21
        相关资源
        最近更新 更多