2011-12-22 15 views
1

C#を電子メールアカウントに接続し、配信されなかったメールまたは失敗を処理することを検討しています。失敗したアドレスや元の電子メールをテキストファイルに書きたいと思います。C#で処理する電子メールの失敗

私は失敗したメッセージを特定する方法を理解できたと確信しています。例:WHERE件名に 'failed'、 'returned'などが含まれています。

どのようにすればよいかわからないのは、電子メールから失敗したアドレスを収集することです。

私は、ある時点でクライアントに対してpopmongerというプログラムを使用していましたが、今は間違った電子メールアドレスを収集しています。元の電子メールまたは失敗した電子メールの代わりに、[email protected]を収集しています。私はC#サービスを書いた方が簡単かもしれないと思った。

私が接続している電子メールアカウントは、hostgatorです。誰がこれをどこから始めるべきか知っていますか?

おかげで、

ジェイク使用されているメールクライアントがpopmongerと呼ばれているので

+5

詳細を入力する必要があります。どのような種類のメールアカウントですか? Exchange、Gmail、Hotmail、...? –

+0

私が接続している電子メールアカウントはhostgatorです。 –

+0

さらに詳しい情報を提供する必要があります。電子メールアカウントは一般にPOP3またはIMAPのいずれかであり、各プロトコルを扱う方法は異なります。 – bobbymcr

答えて

2

、それはあなたがPOP3プロトコルに対処されますように聞こえると.NETは簡単にSMTP経由でメールを送信する方法を提供するが、それを電子メールをチェックするとき、同じ正義を実際にはしません。

電子メールを取得するには、POP3クライアントを持つサードパーティのDLLを使用する必要があります。最も重要なことは、失敗した電子メール通知の1つを調べて、アプリケーションが期待するものを確認する必要があることです。件名、本文、発信者アドレスなどに共通するものがあり、どの電子メールが失敗通知であるかを知る必要があります。次に、本文のどこにテキストファイルに書き込むために取得する必要があるエラー情報を指定するのかを確認する必要があります。基本的にはあなたの手順は、このような何かに行く必要があります:コレクション(List<T>作品だけで罰金)に、それぞれの障害の電子メールオブジェクトを追加します

  • のためのチェックをし、電子メールメッセージ
  • を取得
  • 読み取り/情報を抽出するために、各電子メールを解析あなたが必要です
  • 抽出されたデータをファイルに書き込む
  • すべてがうまくいって例外がない限り、POPクライアントオブジェクトを使用してPOPサーバーから電子メールを削除します毎回通知してテキストを記入してください

)冗長データを含むファイル私はthis CodeProjectの記事からPOP3クラスを使用しました、それは、添付ファイルのコードを含んでいますが、それは彼らと少しバギーですので、私は、添付ファイルのためにそれを使用することはありません。電子メールの本文を読むために、それは私にまだ失敗していない(木を打つ)。

エラー通知を受け取ったら、単純な正規表現パターンで指定されたフォーマットに従って失敗したアドレスを抽出して一致させることができます。のは、本文テキストがすでにサーバーから取得し、あなたが弦テキストの横にbodyText

using System.Text.RegularExpressions; 
// ... 

string failedAddressPattern = @"The mail system <(?<address>.+)>"; 
string capturedAddress = null; 
Match match = Regex.Match(bodyText, failedAddressPattern, RegexOptions.IgnoreCase); 

if(match.Groups["address"].Success) 
{ 
    capturedAddress = match.Groups["address"].Value.Trim(); 
} 

if(capturedAddress == null) 
{ 
    // do some form of debug logging here because the pattern no longer works, etc. 
} 
+0

私が知っているimapを使用できない理由はありません。件名は、yahoo、gmail、centurytel、およびhotmailアドレスでテストされた「送信者に返された未送信メール」です。失敗したアドレスは本文の "The mail sytem <" AND ">"の間です。 –

+0

IMAPの使用も問題ありません。私の答えは高水準のソリューションなので、IMAPクライアントも使用できますが、私は決してそれを推薦することはできません。本文の本文からアドレスを抽出する方法を示すために私の答えを編集します。 – jlafay

+0

Cool。ありがとう。これまでPHPで行ってきましたが、むしろC#でビルドしたいと思います。 –

0

という名前でそれを保存されていると仮定しましょう、あまりにもそのためのstandarがあり、スキャン、それはDSN(RFC 3464で定義された配信状態通知)と呼ばれています。このようなメッセージは、コンテンツタイプヘッダー "multipart/report; report-type = delivery-status"で指定できます。 http://www.lumisoft.ee/lsWWW/download/downloads/Examples/をチェックすることができます。POP3/IMAPクライアントがすべて必要です。それはまたあなたが必要とするMIMEメッセージパーサーを持っています、それはまたDSNメッセージサポートを持っています。完全なソースコードが提供されているので、簡単に始めることができます。