The project of U-WA-
http://uwa.potetihouse.com/
トップページ > 記事閲覧
アイコン 【TKMP】全文が読み込まれないときがある
日時: 2010/03/09 13:25
名前: おやぢ2009

いつもお世話になります。TKMPとTKFPに感謝しています。

for (i = 0; i < ・・・){
TKMP.Net.MailData Data = (TKMP.Net.MailData)Mails[i];
TKMP.Reader.MailReader re = new TKMP.Reader.MailReader(Data.DataStream, false);
string main = re.MainText;
}

上記のようにTKMPでサーバーにアクセスして一度にすべてのメールを読み込んでいるのですが、本文の全文を読み込みできない(途中で途切れてしまう)メールがあります。

その全文読み込めないメールは、ある特定のメールですが、今のところ他のメールとの違いは発見できていません。(いつも使用しているOutlookExpressでは、全文読み込まれないことはありません。)

また、全文読み込めることもあります。

コードの書き方が違うのでしょうか?もし解決のヒントになるようなことがあればお教え下さい。

よろしくお願いします。
メンテ

Page: 1 |

ファイル Re: 【TKMP】全文が読み込まれないときがある ( No.1 )
日時: 2010/03/12 22:39
名前: Toki◆pRU.c9X.EOI

幾つか確認をお願いします。

・途中で途切れるメールは常に同じメールですか?
・途中で途切れていると判断しているのは、受信データですか?解析した本文ですか?
・途中で途切れたメールの後に通信切断などは起きていませんか?

受信データは正常で、解析した本文が途切れる場合は
TKMP.Reader.MailReaderクラスでの解析に問題があると思います。

途中で通信切断が起こってメールが途切れる場合は
TKMP.Net.PopClientでの処理に問題があると思います。

まず、どちらで問題が発生しているかを切り分けられると助かります。







メンテ
ファイル Re: 【TKMP】全文が読み込まれないときがある ( No.2 )
日時: 2010/03/15 12:35
名前: おやぢ2009

お返事ありがとうございます。

一つ重要なことを書き忘れたのですが。

全文を読み込めないときにTKMPに付属のサンプル(Sample_cs_2005.sln)で試したところ、本文は私が作ったプログラムと同じ個所で途切れてしまいます。

途切れてしまうのは、受信データです。上記のコードでは「変数 main」です。

上記の他のご質問に関しては、後ほどお答えさせていただきます。

よろしくお願い致します。
メンテ
ファイル Re: 【TKMP】全文が読み込まれないときがある ( No.3 )
日時: 2010/03/15 18:04
名前: おやぢ2009

>・途中で途切れるメールは常に同じメールですか?

同じメールです。しかしそのメールを削除したあと、何日間かたってからまた
その現象を引き起こす違うメールが出てくるいう感じです。

その対象となるメールは、サーバーに何通も存在する可能性があります。


>・途中で途切れていると判断しているのは、受信データですか?解析した本文ですか?

申し訳ありませんが、私は「受信データ」と「解析した本文」が何かを理解できません。
TKMPに付属のサンプル(Sample_cs_2005.sln)のlistView1_DoubleClickの中のre.MainText
に当たる文字列を指します。


>・途中で途切れたメールの後に通信切断などは起きていませんか?

通信は受信ボタンを初めてクリックしたとき開始し、アプリケーションを終了するとき
切断する形なので、途中で通信切断は起きていないと思います。対象となるメール受信の
あとのメールも受信していますので大丈夫だと思います。

もし不測の切断があるとすれば、メッセージの受信イベントのe.Messageを取得すれば
判りますか?


今回のことと関係あるかは分かりませんが、一番最初のコードは正しくは下記のように
一度の受信でHeaderStreamとDataStreamを一度に取得しています。

for (i = 0; i < ・・・)
{
TKMP.Net.MailData Data = (TKMP.Net.MailData)Mails[i];

TKMP.Reader.MailReader re = new TKMP.Reader.MailReader(Data.HeaderStream, false);
string from = re.HeaderCollection["From"];
string subject = re.HeaderCollection["Subject"];
DateTime date = new TKMP.Reader.Header.DateTime(re).Value;

TKMP.Reader.MailReader re2 = new TKMP.Reader.MailReader(Data.DataStream, false);
string main = re2.MainText;
}

よろしくお願いします。
メンテ
ファイル Re: 【TKMP】全文が読み込まれないときがある ( No.4 )
日時: 2010/03/15 23:05
名前: Toki◆pRU.c9X.EOI

報告ありがとうございます。

途中で通信が途切れていないのでしたら、
サーバーからのデータの受信は成功していると思います。


string main = re2.MainText;
この部分で取得できる文字列は
TKMP.Reader.MailReaderでの解析後のデータとなります。
Data.DataStreamをそのままファイルに保存することができれば
全てのデータが受信できているか解ると思います。


TKMP.Reader.MailReaderでデータの欠損が起こる可能性は
・クラス自体に問題がある
・受信メールに規格外の記述がある

どちらにしろ問題箇所は本文の途切れた部分の次にあると思います。
メンテ
ファイル Re: 【TKMP】全文が読み込まれないときがある ( No.5 )
日時: 2010/03/16 07:59
名前: おやぢ2009

ご回答ありがとうございます。

> Data.DataStreamをそのままファイルに保存することができれば

ファイルに保存するというのは具体的にはどのようにすれば
良いのでしょうか?

お手数をお掛けしますが、お教え下さい。
メンテ
ファイル Re: 【TKMP】全文が読み込まれないときがある ( No.6 )
日時: 2010/03/17 00:10
名前: Toki◆pRU.c9X.EOI

>ファイルに保存するというのは具体的にはどのようにすれば
>良いのでしょうか?

byte[] source = new byte[Data.Length];
Data.DataStream.Read(source, 0, source.Length);
System.IO.File.WriteAllBytes(path, source);

バイト配列に一旦置き換えることで簡単にできると思います。

メンテ
ファイル Re: 【TKMP】全文が読み込まれないときがある ( No.7 )
日時: 2010/03/17 08:18
名前: おやぢ2009

ご回答ありがとうございます。

今現在メールサーバーには、対象となるメールは全て削除
されてしまっていて、教えていただいた方法で試すことが
できません。

もし今度サーバーに入ってきましたら、試してご報告させ
ていただきます。

よろしくお願いします。
メンテ

Page: 1 |

題名 スレッドをトップへソート (必ず題名内に日本語を使用してください)
名前
E-Mail
URL
パスワード (記事メンテ時に使用)
コメント 顔smile01.gif 顔smile02.gif 顔smile03.gif 顔smile04.gif 顔smile05.gif 顔smile06.gif 顔smile07.gif

   クッキー保存