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 のように見える) 値を返すメソッドがありますが、これがすべてのようですPop3Client
。GetMessageUid(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
ここで何かが欠けていることを本当に望んでいます。本当に単純なプロセスであるべきことは確かに単純ですが、自分で他に何も見つけることができません。