3

MailKitPop3Clientを使用して POP3 メールボックスからメッセージを取得し、処理後にこれらのメッセージを削除したいと考えています。検索コードは次のようなものです。

Public Function GetMessages(Optional logPath As String = Nothing) As List(Of MimeMessage)

    Dim client As Pop3Client
    Dim messages = New List(Of MimeMessage)()

    Using client
        ConnectPop3(client)
        Dim count = client.GetMessageCount()
        For i As Integer = 0 To count - 1
            Dim msg = client.GetMessage(i)
            messages.Add(msg)
        Next
    End Using

    Return messages

End Function

ここでの問題は、別のメッセージ内のメッセージを削除することです。インデックスが必要ですが、終了すると、それはずっと前に消えてしまいますGetMessages。私が持っているのはMimeMessageオブジェクトで利用可能な情報だけですが、それには index プロパティがなく、 のみMessageIdですが、私の Delete メソッドでは、インデックス値を検索するためにすべてのメールを再度読み取る必要があります。

現在、Mime MessageID とはまったく関係のない不思議な文字列 (int のように見える) 値を返すメソッドがありますが、これがすべてのようですPop3ClientGetMessageUid(int index)次に、辞書を使用して uid とメッセージのペアを保存し、取得コードを次のようにして、各メッセージと共に MailKit Uid を保存する必要があります。

Public Function GetMessages(Optional delete As Boolean = False, Optional logPath As String = Nothing) As List(Of MimeMessage)

    Dim client As Pop3Client
    Dim messages = New Dictionary(Of String, MimeMessage)

    Using client
        ConnectPop3(client)
        Dim count = client.GetMessageCount()
        For i As Integer = 0 To count - 1
            Dim msg = client.GetMessage(i)
            Dim u = client.GetMessageUid(i)
            messages.Add(u, msg)
        Next
        client.Disconnect(True)
    End Using

    Return messages

End Function

ここで何かが欠けていることを本当に望んでいます。本当に単純なプロセスであるべきことは確かに単純ですが、自分で他に何も見つけることができません。

4

1 に答える 1

3

メッセージ UID は、接続間でメッセージを追跡する唯一の方法です。

メッセージのインデックスは、他のメッセージが削除されると変更される場合があります。

オプションは次のとおりです。

  • ダウンロード中にメッセージを削除します。

  • 後で戻って特定のメッセージを削除できるように、UID を保存します。

POP3 RFCをざっと読んでみると、より理解が深まるかもしれません。

于 2015-05-10T00:58:12.283 に答える