使用pop3时未排序提取的电子邮件

时间:2018-11-14 15:14:38

标签: c# gmail pop3 mailkit

首先,我正在使用该库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相同的经过身份验证的电子邮件,并且已订购提取的电子邮件

1 个答案:

答案 0 :(得分:0)

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

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

library(tidyverse)
map_df(split(df, df$person), function(x) {
    i = which(grepl('meal', x$food))
    i1 <- i[1] -1
    i2 <- i[length(i)]
    v1 <- x$food[i1:i2]
    v1 <- sub('and\\s*$', "", 
       sub("meal\\s+\\d+", "",  v1))  %>%
            accumulate(., c) %>%
               map_chr(~ .x %>% 
                            rev %>% 
                            paste(., collapse = ' and '))
   x$combined_meal <- x$food
   x$combined_meal[i1:i2] <- v1
   x})
# A tibble: 7 x 6
#  person  meal food             dependencies solo_meal combined_meal           
#  <chr>  <int> <chr>                   <dbl>     <dbl> <chr>                   
#1 A          1 Chicken                    NA         1 Chicken                 
#2 A          2 Beef                       NA         1 Beef                    
#3 A          3 Soup and meal 2             2         0 Soup  and Beef          
#4 A          4 Lamb and meal 3            NA         1 Lamb  and Soup  and Beef
#5 B          1 Lamb                       NA         1 Lamb                    
#6 B          2 Salad and meal 1            1         0 Salad  and Lamb         
#7 B          3 Beef                       NA         1 Beef    

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

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

  

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

     

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

     

如果您仍然无法下载电子邮件,请尝试使用最新的   模式:

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

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