2011-06-23 33 views
4

我从Exchange 2003服务器,并从这些电子邮件拉动许多电子邮件中收到一封电子邮件地址,试图确定哪些是反弹中后卫(无效),所以我可以从我们的通讯录中删除它们。你怎么一个字符串

什么是搜索电子邮件正文找上了反弹背上电子邮件地址的最有效的方法?

+0

在何种意义上有效的?在速度方面?准确性? –

+0

速度超过准确度。所有客户都是美国(有限字母表)。我看了这里http://stackoverflow.com/questions/1028553/how-to-get-email-address-from-a-long-string,但这是一个PHP的答案,我不知道分裂一个空白处的C#字符串(可能很慢)。是正则表达式的路要走吗? – Paul

+0

可能是一个正则表达式。你有一些示例文本? –

回答

0

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

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

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

    return matches; 
} 
0

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

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

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

+0

我正在制定规则,然后评估“非托管”电子邮件以创建更多规则。真正的回复将他们的电子邮件发送到'发件人',我可以将其与我们发送的邮件进行匹配。但是正则表达式非常有帮助。我不必长时间触摸正则表达式。 – Paul

+0

我会对“真实”回复在发件人地址中的电子邮件的假设保持警惕,从经验来看,情况并非如此。我们实际上使用商业程序来扫描每封电子邮件,并为每个电子邮件分配一个类别,并执行一个存储过程将其直接插入到我们的数据库中。不错而且容易,并且节省了我不得不编写自己的规则的麻烦。 – ChrisBint

2

你可能想看看this page,其中有匹配的电子邮件地址的正则表达式的几个变种,并解释了权衡选择每个。在选择一个之前,你一定要阅读它。

+0

非常有帮助,谢谢 – Paul