如何使用 MailKit POP3 客户端通过消息 ID 删除消息?

问题描述 投票:0回答:1

我想使用MailKit

Pop3Client
从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
对象上的可用信息,但它没有索引属性,只有
MessageId
,但在我的删除方法中,我必须再次读取所有邮件,以便查找索引值。

现在

Pop3Client
有一个
GetMessageUid(int index)
方法,它返回一个神秘的字符串(看起来像 int)值,与 Mime MessageID 没有明显的关系,但似乎这就是我所拥有的。然后我必须将 MailKit Uid 与每条消息一起存储,使我的检索代码类似于这样,使用字典来存储 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

我真的希望我在这里遗漏了一些东西,应该是一个非常简单的过程确实很简单,但我自己找不到其他东西。

vb.net email pop3 mailkit
1个回答
3
投票

消息 UID 是跟踪连接之间消息的唯一方法。

消息的索引可能会随着其他消息的删除而更改。

您的选择是:

  • 下载消息时将其删除。

  • 保存 UID,以便您稍后可以返回并删除特定消息。

如果您浏览一下 POP3 RFC,可能会更有意义。

© www.soinside.com 2019 - 2024. All rights reserved.