Re: TKMP添付ファイル処理 ( No.1 ) |
- 日時: 2008/02/18 22:30
- 名前: Toki◆pRU.c9X.EOI
- >TKMPを利用して、POPを叩き、メールを読み込んで、添付された画像ファイルを抽出して保存という事をし>たいのですが、YahooのWebメールで添付された画像ファイルは、TKMP.Reader.MailReaderのFileCollectionには入らず、PartCollectionの方に入っている様です。
YahooのWebメールで添付した画像ファイルはContent-Dispositionが「inline」となるため 「添付ファイル」としては処理されません。 このため、添付ファイルの情報であるFileCollectionプロパティでは読み出すことが出来ません。 ただし、各パートのヘッダ情報からファイル名などは取得できます。
>それで、PartCollectionも色々見てみましたが、[0]番目が本文?、[1]番目が最初の添付ファイル、となっている様でしたので、[1]番目以降を添付ファイルとして取り出しています。 >そこで、part.MainDataがデータだと言う事で、BinaryWriterを用いてそのままデータをファイルに書き出しているのですが、どうやらBase64でエンコードされたテキストが入っているらしいのです。 >ただし、複数のjpgファイルを添付させると、ちゃんとバイナリレベルでjpgとなっている場合もありました。
PartCollectionのインディックスはメールの構造によって変化する可能性がありますが、基本的はその手順で問題ありません。 MainDataプロパティはデコードされたバイナリデータが入るはずなので、Base64でエンコードされたテキストが入ることはないと思います。
|
Re: TKMP添付ファイル処理 ( No.2 ) |
- 日時: 2008/02/19 10:44
- 名前: noridon
- ご回答有難うございます。
>MainDataプロパティはデコードされたバイナリデータが入るはずなので、Base64でエンコードされたテキストが入ることはないと思います。
との事なんですが、実際に吐かせてみたデータをアップしてみますね。 以下のコードで吐いたものです。中身はテキストで、Base64っぽい雰囲気なんですけど。 うまくバイナリ化される事もあるんです。 なので、どうしたらいいものかと思いまして。
http://www.engelsstimme.net/test/capture.jpg
一応、取り出している関数のコードをアップさせて頂きますね。 VisualStudio2008、.NetFrameWorkは、最新の3.5です。
public void GetFiles(System.IO.Stream MailStream) { //メールデータの解析クラスを作成します TKMP.Reader.MailReader reader = new TKMP.Reader.MailReader(MailStream, false);
string strTmpFoler = Path.GetTempPath();
if (reader.FileCount == 0) { if (reader.ContentType.Types == TKMP.Reader.Header.ContentType.MIMETypes.Multipart) { int nCount = reader.PartCollection.Count; if (nCount > 1) { for (int i = 1; i < nCount; i++) { TKMP.Reader.MailReader part = reader.PartCollection[i]; string fname = part.ContentType.FileName; string ext = Path.GetExtension(fname); if (ext.Length > 0) { byte[] data = part.MainData; string ofile = strTmpFoler+fname; using (BinaryWriter w = new BinaryWriter(File.OpenWrite(@ofile))) { w.Write(data); }
} } } } } else { //添付ファイルのコレクションを検査します foreach (TKMP.Reader.File file in reader.FileCollection) { // tmpフォルダへ書き出し file.FileSave(@strTmpFoler); } } }
|
Re: TKMP添付ファイル処理 ( No.3 ) |
- 日時: 2008/03/13 00:38
- 名前: Toki◆pRU.c9X.EOI
- なかなか返事が出せなくて申し訳ありません。
引越しのため開発用PCがなかなか準備できないので、憶測になりますが、
Ver 2.4.11で修正したつもりのセパレータ処理に不具合があるため、
Base64デコードに失敗し、ソースを直接返しているかもしれません。
同様の現象を他の方からも報告いただいたので、近日中に修正したいと思います。
|
Re: TKMP添付ファイル処理 ( No.4 ) |
- 日時: 2008/05/08 10:50
- 名前: noridon
- 久しぶりに見に来たら、レスがあって、とても嬉しいです。
早速、最新版のDLLを差し替えたら、見事に上手く動きました!! 本当に、本当に、有難うございます!!!!
|