首页 > 解决方案 > 当我使用 pop3 时,获取的电子邮件未排序

问题描述

首先,我使用这个库 OpenPop.Pop3 通过 POP3 获取电子邮件,它工作正常,它将从最后一封电子邮件订购的电子邮件返回到第一封电子邮件,但是当我将库更改为 mailkit 库时,返回的邮件没有排序并且无法知道基于在我更改为 mailkit 库后,mailkit 订单获取的电子邮件是我的代码

using (Pop3Client client = new Pop3Client())
        {
            // Connect to the server
            client.Connect(hostname, port, useSsl);
            client.AuthenticationMechanisms.Remove("XOAUTH2");
            client.Authenticate((username), password);
            int messageCount = client.Count;

            // We want to download all messages
            List<MimeMessage> allMessages = new List<MimeMessage>(messageCount);

            for (int i = messageCount-1; i > 0; i--)
            {
                    var msg = client.GetMessage(i);
                    allMessages.Add(msg);
            }
         }

通过这种方式,allmessages 变量应该包含从最后一封电子邮件到第一封电子邮件排序的电子邮件,但这并没有发生电子邮件根本没有排序,尽管我之前使用 OpenPop.Pop3 使用相同的经过身份验证的电子邮件,并且订购了获取的电子邮件

标签: c#gmailpop3mailkit

解决方案


我不知道为什么不会为您订购它们,因为 MailKit 没有进行任何排序。

也就是说,MailKit 使用基于 0 的索引,而我认为 OpenPOP.NET 必须使用基于 1 的索引,因此您的循环应该进行以下更改:

for (int i = messageCount-1; i >= 0; i--)
{
    var msg = client.GetMessage(i);
    allMessages.Add(msg);
}

也许这会产生预期的结果?

更新:事实证明,MailKit 正在以相反的顺序正确下载消息,就像他的代码试图做的那样(如他的后续问题中所述)。该用户面临的问题是,他的 GMail 帐户设置仅向 MailKit 的 Pop3Client 提供了其总收件箱的一部分,正如 Google 的常见问题解答中标题为“电子邮件未正确下载”的部分中所解释的那样,其中指出:

在您的 Gmail 设置中设置 POP 后,您的电子邮件将可以批量使用。查看所有电子邮件可能需要一段时间。

注意:Gmail 会下载您发送或接收的每封电子邮件的副本,聊天、垃圾邮件和已删除邮件中的电子邮件除外。为避免重复,Gmail 不会下载在您的邮件客户端中发送的电子邮件,但如果您登录到 Gmail,您仍然可以看到它们。

如果您在下载电子邮件时仍然遇到问题,请尝试使用最近模式:

  1. 在您的电子邮件客户端的 POP 设置页面中,找到“电子邮件地址”或“用户名”字段。
  2. 添加最近的:在您的电子邮件地址前面。例如,最近的:example@gmail.com。

如果这不能解决问题,请尝试从电子邮件客户端中删除您的 Gmail 地址,然后重新添加。


推荐阅读