2011-08-05 19 views
0

電子メール添付ファイルを取得し、以下のコードを使用してファイルシステムの特定のディレクトリに保存しようとしています。Openpop.NET特定のフォルダへの添付ファイルの取得

Dim objMail As Message = New Message(Encoding.ASCII.GetBytes(strMessage)) 

For Each att In objMail.FindAllAttachments() 
    Dim Stream as FileStream = New FileStream("D:\XX\" & att.FileName.ToString(), 
     FileMode.Create) 
    Dim BinaryStream As New BinaryWriter(Stream) 
    BinaryStream.Write(BitConverter.ToString(att.Body)) 
    BinaryStream.Close() 
Next 

また、私は目的のフォルダに添付ファイルを保存することができています。このコードを使用してatt.GetBodyasText()

を試してみました。しかし、ファイルを開いているときにエラーが表示されます - >ファイルが適切でないフォーマットまたは正しくデコードされていません。

私は、MIMEのエンコード/デコードを初めて行っています。この問題を解決するのを手伝ってください。

本当に緊急です。

答えて

8

私はOpenPop.NETの開発者です。 strMessageの内容がから来ている

  1. を使用すると、メッセージクラスをインスタンス化するために使用しているコードを使用して複数の問題がありますか?

  2. ASCIIでのみエンコードされていることをどのように知っていますか?

これらは大きな違いをもたらす可能性のある2つの大きな問題です。 文字列を使用してメッセージを格納するのではなく、生のバイトを使用する必要があります。

例えば

(C#の場合):このように

byte[] byteMessage = someFileStream.ReadToEnd(); 
Message message = new Message(byteMessage); 

、あなたはバイトに間違ったエンコーディングを使用してメッセージを破棄しません。通常、電子メールには、バイトを文字列にデコードする方法を示すヘッダーが含まれます。これは、OpenPop Messageクラスがあなたのために行うことです。

添付ファイルについて説明します。添付ファイルは通常、生のバイトです。たとえば、PNGピクチャは、PNGピクチャリーダが理解するいくつかのバイトです。 PNG画像リーダーが画像を理解するためには、添付ファイルの生のバイトをファイルに保存する必要があります。 att.Bodyを使って生のバイトを得ることができます。

生のバイトが意味をなさない添付ファイルもあります。たとえば、BASE64でエンコードされたテキスト添付ファイルは、テキストリーダープログラムにはあまり役に立ちません。保存する前にテキストに変換する必要があります。 att.GetBodyAsText()を使用してテキストを取得できます。

あなたがやっていることは、添付ファイルの生のバイトをとり、BitConverterを使ってそれを16進数に変換することです。これは意味がありません。代わりに、あなたはあなたを変更する必要があります。

BinaryStream.Write(BitConverter.ToString(att.Body)) 

場合

BinaryStream.Write(att.Body) 

へのあなたの添付ファイルは、画像またはいくつかのより複雑なファイルです。

私はこれがあなたの問題に役立つことを願っています。

+0

クイックレスポンスに感謝します。 私はデータベースからメールを取得し、メールの添付ファイルを取得しようとしています。 データベース内のメールの内容は、varbinaryデータ型に保存されます。私はそれらのメールの内容をいくつかの処理のために文字列に変換し、再びASCIIEncoding.ASCII.getBytes()を使用してバイト()に変換する添付ファイルを取得しています..また、att.GetBodyAsText()、att.BodyをBinaryWriter 。しかし、まだエラーは同じです!デコードされません正常に開いてエクスポートされたPDFドキュメント..助けてください。 –

+0

また、もう一つ..私は適切な形式でPlainTextとHtml MessagePartを取得しています..私もatt.SaveToFile(新しいFileInfo( "ファイルパス")を試してみました)添付ファイルを保存することはできますが、改善はありません –

+1

電子メールをデータベースに追加したのは誰ですか?電子メール(未処理)_CANNOT_は文字列として格納されますが、それは意味をなさないためです。代わりにBLOB(Binary Large OBject)として格納するか、生のバイトを格納しやすくする必要があります。 ASCII.getBytes()を使用する場合は、電子メール全体がASCIIであることを確認する必要があります。そうしないと、間違ったバイトが生成され、後でOpenPopはこれらのバイトを見つけ出して間違った添付ファイルを作成します。私はこれがあなたの主な問題だと思う。簡単に言えば、あなたは、すべてのコンテンツが間違ったエンコーディングによって破壊されたかもしれない電子メールをOpenPopに与えています。 – foens

関連する問題