質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

6688閲覧

.NET用メール送受信クラスライブラリ (TKMP.DLL) の使い方について

bybalsender

総合スコア33

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2016/11/24 12:04

いつもお世話になります。
TKMP.DLLを利用して受信済みメールを除いて受信を行ないたいと思いますが、
http://uwa.potetihouse.com/samplecode/tkmp/uidcheck.html
を元に挑戦しましたができませんでした。

作成したコードです。
private void button1_Click(object sender, EventArgs e)
{
//接続情報
string server = "pop.ae.auone-net.jp";
int port = 110;
string userid = "a789133385";
string pass = "v2wr2ipe";

//サーバへの接続用クラスを作成する System.Net.IPAddress address = Dns.GetHostByName(server).AddressList[0]; TKMP.Net.IPopLogon logon = new TKMP.Net.BasicPopLogon(userid, pass); TKMP.Net.PopClient pop = new TKMP.Net.PopClient(logon, address, port); //接続開始 if (!pop.Connect()) { System.Windows.Forms.MessageBox.Show("接続失敗"); return; } UID ui = new UID(); //ココがわかりません string[] itm = new string[5]; //ココがわかりません MessageBox.Show( ui.NoReadMails(pop, itm).ToString()); //切断 pop.Close(); } } class UID { //接続済みのクライアントクラスと、読み出し済みUIDリストを引数に渡すと、 //未読メールのクラス一覧を返します public TKMP.Net.MailData[] NoReadMails(TKMP.Net.PopClient PopClient, string[] ReadUIDList) { //一時格納用のコレクション System.Collections.ArrayList mails = new System.Collections.ArrayList(); //メールボックスの全てのメールを検査する foreach (TKMP.Net.MailData mail in PopClient.MailDatas) { bool read = false; //読み出し済みUIDと一致するものを確認する foreach (string UID in ReadUIDList) { if (mail.UID.Equals(UID)) { read = true; break; } } if (!read) { //未読をコレクションに追加する mails.Add(mail); } } //コレクションから配列へ変換 TKMP.Net.MailData[] mailarray = (TKMP.Net.MailData[])mails.ToArray(typeof(TKMP.Net.MailData)); return mailarray; }

}

「//接続済みのクライアントクラスと、読み出し済みUIDリストを引数に渡すと、」の引数のソースがわかりません、また別クラスにしたのもいけないのかもしれません。

受信済みメールを除いて受信を行なう方法を教えてください。
よろしくお願いします。
尚メールの原理は全くわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

TKMP.DLLを実際に使ったことがないのですが、参照URLのサイトを見ると

メールが既読か未読かを判断する機能はライブラリに無いので、コード実装する必要があります。 方法は、サーバー内のメールに固有に振られるUIDを利用し、読み出したメールのUIDを記憶しておき、 次回読み出し時にUIDが一致するメールを読み込まないようにします。

とありますので、ファイル等に取得したメールのUIDを保存する処理と、保存したUIDを読み込む処理が必要になります。当然初回のアクセスではファイルが存在しないか、保存されたUIDがありませんので、すべてのメールを受信することになります。

質問者さんのソースを修正するとすれば

C#

1//接続開始 2if (!pop.Connect()) 3{ 4 System.Windows.Forms.MessageBox.Show("接続失敗"); 5 return; 6} 7UID ui = new UID(); 8// ファイルからUIDを読み込む 9string[] itm = ReadUID(); 10// 未読メールの取得 11System.Collections.ArrayList mails = ui.NoReadMails(pop, itm); 12 13MessageBox.Show( mails.ToString()); 14// 取得したUIDの保存 15SaveUID(mails) 16//切断 17pop.Close(); 18

のような感じでしょうか。
ReadUID()はファイルからUIDを読み込んで配列として返す関数、SaveUIDはTKMP.Net.MailDataのArrayListを引数に、UIDのみをファイルに保存する関数として実装してみてください。

投稿2016/11/24 13:07

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bybalsender

2016/11/24 13:36

「ReadUID()はファイルからUIDを読み込んで配列として返す関数」と「SaveUIDはTKMP.Net.MailDataのArrayListを引数に、UIDのみをファイルに保存する関数」がわかりません、こまりましたね~~~
KoichiSugiyama

2016/11/25 01:07

データをファイルに保存する方法は自力で調査して実装された方が勉強になると思います。C#初心者だとお見受けしますが、「C# ファイル入出力」などのキーワードで検索サイトを使って調べられれば、それこそ私の説明より親切丁寧に記載されているサイトがたくさん見つかると思います。
bybalsender

2016/11/25 11:12

お返事有難う御座います。 データをファイルに保存する方法を調べたとしても、実装の仕方がわかりません。 大変恐縮ですが、サンプルを書いて頂けないでしょうか。 よろしくお願いします。
bybalsender

2016/11/27 09:02

UIDリストの前回の分をNoReadMailsに渡すだけなんですね。 すいません、難しく考えてしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問