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

私はここでいくつかの答えをこのようなものにしました。それは実際に文字列から各電子メールアドレスを返します(メールホストとターゲットアドレスからの倍数があることもあります)。その後私たちが送信した送信アドレスに対して、それぞれの電子メールアドレスを照合して確認することができます。 @plithからの記事を使って正規表現をよりよく理解し、@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

私は行くと、ルールを開発して、 "管理されていない"電子メールを評価し、より多くのルールを作成します。本当の返信は私が送った人に戻って一致させることのできる 'from'のメールを持っています。しかし、正規表現は非常に役に立ちます。私は非常に長い間、正規表現に触れる必要はありませんでした。 – Paul

+0

私は、「本当の」返信には送信元アドレスの電子メールがあることを前提にしていますが、これはそうではありません。実際には、各電子メールをスキャンし、それぞれにカテゴリを割り当て、ストアドプロシージャを実行してDBに直接挿入する商用プログラムを使用します。素敵で簡単で、自分のルールを書かなくても大変です。 – ChrisBint

2

this pageには、電子メールアドレスを一致させるための正規表現のいくつかの亜種があり、それぞれを選択する際のトレードオフが説明されています。あなたはここでそれを選ぶ前に間違いなくそれを読むべきです。

+0

非常に参考になりました、ありがとう – Paul

関連する問題