0

大量の電子メールを送信すると、SMTP サーバーで数百のエラーが発生しました。現在、多数の .BAD ファイルがあり、それぞれにエラー メッセージが含まれており、その中間に、実際に送信されるはずの電子メール アドレスが含まれています。

実際に失敗したメールのリストを取得できるように、各ファイルから「メールアドレス」だけを抽出する最も簡単な方法は何ですか?

私は C# でコーディングできます。どんな提案でも大歓迎です。

悪いサンプル テキスト:

From: postmaster@my.server.com
To: me@me.com
Date: Tue, 25 Sep 2012 12:12:09 -0700
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
    boundary="9B095B5ADSN=_01CD9B35032DF58000000066my.server.co"
X-DSNContext: 7ce717b1 - 1386 - 00000002 - C00402D1
Message-ID: <FRaqbC8wS00000068@my.server.com>
Subject: Delivery Status Notification (Failure)

This is a MIME-formatted message.  
Portions of this message may be unreadable without a MIME-capable mail program.

--9B095B5ADSN=_01CD9B35032DF58000000066my.server.co
Content-Type: text/plain; charset=unicode-1-1-utf-7

This is an automatically generated Delivery Status Notification.

Unable to deliver message to the following recipients, due to being unable to connect successfully to the destination mail server.

       email@stackoverflow.com




--9B095B5ADSN=_01CD9B35032DF58000000066my.server.com
Content-Type: message/delivery-status

Reporting-MTA: dns;my.server.com
Received-From-MTA: dns;Social
Arrival-Date: Tue, 25 Sep 2012 11:45:15 -0700

Final-Recipient: rfc822;email@stackoverflow.com
Action: failed
Status: 4.4.7

--9B095B5ADSN=_01CD9B35032DF58000000066my.server.com
Content-Type: message/rfc822

Received: from Social ([127.0.0.1]) by my.server.com with Microsoft SMTPSVC(7.5.7601.17514);
     Tue, 25 Sep 2012 11:45:15 -0700

email@stackoverflow.com主に、メールを真ん中で見つけたいです。

4

2 に答える 2

4

このタスクに C# は必要ありません。これはGrepを使用すると、はるかに簡単に解決できます。新しい C# プログラムを作成することで、40 年前に解決された問題に対する新しい解決策を作成していることになります :)

grep は、このような問題を解決するために特別に設計されたコマンド ライン ツールです。グロブ(例: ) に一致するファイルのリストを検索し、*.bad正規表現の一致を見つけます。次に、それらの一致をすべてテキスト ファイルにエクスポートすることができます。

メールアドレスを照合するには、この正規表現で十分です。

(?<=^Final-Recipient: rfc822;)(.*)$

grep コマンドは次のようになります。

grep "(?<=^Final-Recipient: rfc822;)(.*)$" *.bad >> emails.txt

これにより、一致したすべての電子メール アドレスが という名前のファイルに保存されemails.txtます。

Windows バージョンの Grep > here <を入手できます。または、Windows には、必要に応じてfindstrと呼ばれる grep の代替機能が組み込まれています。

編集: ルートを下ることに決めた場合はgrep、この質問をServerFaultでもう一度尋ねてください。そこのシステム管理者は、この種のことについて、StackOverflow の開発者よりもはるかに多くの専門知識を持っています:)

于 2012-09-26T09:28:09.153 に答える
0

私には1つの解決策があります....最初に(To :)のインデックスを見つけてから、以下に示す正規表現を使用する必要があります

      start = emailbody.IndexOf("To:");

                        if (start < 0)
                            start = 0;


     string emailExpression = @"([a-zA-Z0-9_\.]+)@([a-zA-Z0-9_\.]+)\.([a-zA-Z]{2,3})";
      System.Text.RegularExpressions.Regex regExp = new System.Text.RegularExpressions.Regex(emailExpression);

                        if (regExp.IsMatch(eamilbody, start))

               {
                     System.Text.RegularExpressions.Match match = regExp.Match(emailbody, start);
                            string email = match.Value;

                 }
于 2012-09-26T08:21:41.460 に答える