RECOMMEND
C# 言語リファレンス Black Book
C# 言語リファレンス Black Book (JUGEMレビュー »)
ビル ワグナー, Bill Wagner, スリーエーシステムズ, アクロバイト
RECOMMEND
RECOMMEND
SELECTED ENTRIES
CATEGORIES
ARCHIVES
MOBILE
qrcode
LINKS
PROFILE
OTHERS

10
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--

メール

主に、メール送受信ライブラリを紹介します。各種ソフトウェア、PHPコンテンツ制作、SEO対策もお任せください。
<< CompoundSmtpClientトライアウトバージョン公開のお知らせ | main | 共有すれば相互リンクはもっと簡単に増える! >>
POP3サーバーからメールを削除せずに新規メールのみを取得する
0
    Exwarp MailKitのPop3ClientContextプロパティを使用すると、すでに受信済みのメールのUID(ユニークID)を保存することができます。
    この機能を利用すると、POP3サーバーからメールを削除せずに、新着メールのみの受信を行なうことができます。
    [C#]
    Exwarp.Net.Pop3.Pop3Client pc = new Exwarp.Net.Pop3.Pop3Client("POP3_HOST");
    pc.User = "POP3_USER";
    pc.Pass = "POP3_PASS";
    pc.Context = context;
    pc.Connect();
    pc.ReceiveAllMessages();
    pc.Close();

    [VB.Net]
    Dim pc As New Exwarp.Net.Pop3.Pop3Client("POP3_HOST")
    pc.User = "POP3_USER"
    pc.Pass = "POP3_PASS"
    pc.Context = context
    pc.Connect()
    pc.ReceiveAllMessages()
    pc.Close()

    [解説]
    POP3_HOSTはPOP3ホスト、
    POP3_USERはPOP3ホストへ接続するユーザー名、
    POP3_PASSはPOP3ホストへ接続するパスワードをそれぞれ表す文字列定数です。
    contextExwarp.Net.Pop3.Pop3Contextのインスタンスを表します。このクラスのインスタンスの生成方法については下部でさらに説明します。

    通常のメール受信の前にExwarp.Net.Pop3.Pop3ClientオブジェクトのContextプロパティにExwarp.Net.Pop3.Pop3Contextオブジェクトをセットします。
    ContextプロパティにPop3Contextオブジェクトがセットされている場合、Pop3Clientは、受信メールのUIDのリストをPop3ContextUniqueIdListプロパティに追加してゆきます。

    Pop3Contextオブジェクトを毎回の受信の前にセットすることで、新着メールのみを受信することができますが、そのためにはPop3Contextオブジェクトをシリアル化(保存)して、次回の受信時に復元しなくてはいけません。
    次にExwarp.Net.Pop3.Pop3Contextオブジェクトのシリアル化/デシリアル化を解説します。

    以下の例では,contextという変数で表されるExwarp.Net.Pop3.Pop3ContextオブジェクトをC:¥context.serというファイルに保存/復元します。(ファイル名及び拡張子はどんな文字列でも構いません。)

    Exwarp.Net.Pop3.Pop3ContextクラスはSystem.SerializableAttribute属性が定義されています。ですからこのオブジェクトをフォーマッタを使用してシリアライズ/デシリアイズすることができます。
    ■シリアライズ方法(保存)
    [C#]
    System.IO.Stream st = new System.IO.FileStream("c:¥¥pop3context.ser",System.IO.FileMode.Create);
    System.Runtime.Serialization.IFormatter f = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
    f.Serialize(st,context);
    st.Close();

    [VB.Net]
    Dim st as New System.IO.FileStream("c:¥pop3context.ser",System.IO.FileMode.Create)
    dim f As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
    f.Serialize(st,context)
    st.Close()

    [解説]
    オブジェクトのシリアル化には、System.Runtime.Serialization.Formatters.Binary.BinaryFormatterクラスを使用します。シリアル化(保存)したいファイルのストリームを表すSystem.IO.Streamとシリアル化したいオブジェクト(context)をSerializeメソッドのパラメータにセットするだけでオブジェクトのシリアル化は完了です。

    ■デシリアライズ方法(復元)
    [C#]
    System.IO.Stream st = new System.IO.FileStream("c:¥¥pop3context.ser",System.IO.FileMode.Open);
    System.Runtime.Serialization.IFormatter f = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
    Exwarp.Net.Pop3.Pop3Context context = (Exwarp.Net.Pop3.Pop3Context)f.Deserialize(st);
    st.Close();

    [VB.Net]
    Dim st as New System.IO.FileStream("c:¥pop3context.ser",System.IO.FileMode.Open)
    dim f As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
    Dim context As Exwarp.Net.Pop3.Pop3Context = f.Deserialize(st)
    st.Close()

    [解説]
    オブジェクトの復元には、System.Runtime.Serialization.Formatters.Binary.BinaryFormatterクラスを使用します。デシリアイズ(復元)したいファイルのストリームを表すSystem.IO.StreamDeserializeメソッドのパラメータに返すと、ファイルから復元されたオブジェクトが返されます。

    この方法でPOP3ホストからメールを削除せずに新着メールのみを取得することができます。
    (注意)UIDの値が他のPOP3ホストと重複することがあり得るため、Pop3ContextはPOP3ホストごとに1ファイル作成するようにして下さい。


    サンプルコード
    [C#]
    System.Runtime.Serialization.IFormatter f = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
    if(System.IO.File.Exists("c:¥¥pop3context.ser"))
    {
      using(System.IO.Stream st = new System.IO.FileStream("c:¥¥pop3context.ser",System.IO.FileMode.Open))
      {
        context = (Exwarp.Net.Pop3.Pop3Context)f.Deserialize(st);
      }
    }
    else
    {
      context = new Exwarp.Net.Pop3.Pop3Context();
    }

    Exwarp.Net.Pop3.Pop3Client pc = new Exwarp.Net.Pop3.Pop3Client("POP3_HOST");
    pc.User = "POP3_USER";
    pc.Pass = "POP3_PASS";
    pc.Context = context;
    pc.Connect();
    pc.ReceiveAllMessages();
    pc.Close();

    using(System.IO.Stream st = new System.IO.FileStream("c:¥¥pop3context.ser",System.IO.FileMode.Create))
    {
      f.Serialize(st,pc.Context);
    }
    | technicals | 12:25 | - | - | - | - |