我想使用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
,但在我的Delete方法中,我必须再次阅读所有邮件,以便查找索引值。
现在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
我真的希望我在这里遗漏一些东西,一个非常简单的过程确实很简单,但我自己找不到任何其他东西。
答案 0 :(得分:2)
消息UID是在连接之间跟踪消息的唯一方法。
邮件的索引可能会随着其他邮件的删除而改变。
您的选择是:
在您下载邮件时删除邮件。
保存UID,以便您以后可以返回并删除特定消息。
如果你浏览POP3 RFC,可能会更有意义。