2011-06-23 60 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