The project of U-WA-
http://uwa.potetihouse.com/
戻る
TKMP.DLL   プログラミングTips

受信済みメールを除いて受信を行なう

 メールが既読か未読かを判断する機能はライブラリに無いので、コード実装する必要があります。 方法は、サーバー内のメールに固有に振られるUIDを利用し、読み出したメールのUIDを記憶しておき、 次回読み出し時にUIDが一致するメールを読み込まないようにします。
 次のサンプルは接続済みTKMP.Net.PopClient PopClientクラスと読み出し済みのUIDリストを渡すと、 未読メールを表すTKMP.Net.MailDataクラスの配列を返します。 事前準備として、
・POPサーバーへの接続
・既読メールのUIDリストの読み出し
が必要です。
メール読み出し後には、何らかの方法で既読メールのUIDリストを保存する必要があります。
※サーバーによって既読メールにはヘッダに「Status: RO」を追加するものもありますが、 全てのサーバーがサポートしているわけではありません。
C#.NET
//接続済みのクライアントクラスと、読み出し済み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;
}
VB.NET
'接続済みのクライアントクラスと、読み出し済みUIDリストを引数に渡すと、
'未読メールのクラス一覧を返します
Public Function NoReadMails(ByVal PopClient As TKMP.Net.PopClient, _
                               ByVal ReadUIDList() As String) As TKMP.Net.MailData()
    '一時格納用のコレクション
    Dim mails As New System.Collections.ArrayList
    'メールボックスの全てのメールを検査する
    Dim mail As TKMP.Net.MailData
    For Each mail In PopClient.MailDatas
        Dim read As Boolean = False
        '読み出し済みUIDと一致するものを確認する
        Dim UID As String
        For Each UID In ReadUIDList
            If mail.UID.Equals(UID) Then
                read = True
                Exit For
            End If
        Next UID
        If Not read Then
            '未読をコレクションに追加する
            mails.Add(mail)
        End If
    Next mail

    'コレクションから配列へ変換
    Dim mailarray As TKMP.Net.MailData() = _
                       CType(mails.ToArray(GetType(TKMP.Net.MailData)), TKMP.Net.MailData())

    Return mailarray
End Function
VB.NETのコードはC#.NETを元に「C#.NET to VB.NET Translator」によって作成したものです

トップページへ移動
The project of U-WA-
http://uwa.potetihouse.com/