首先,我正在使用该库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相同的经过身份验证的电子邮件,并且已订购提取的电子邮件
答案 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。
如果您仍然无法下载电子邮件,请尝试使用最新的 模式:
- 在电子邮件客户端的POP设置页面中,找到“电子邮件地址”或 “用户名”字段。
- 添加最近的邮件:在您的电子邮件地址之前。例如, 最近:example@gmail.com。
如果仍不能解决问题,请尝试从电子邮件客户端删除Gmail地址,然后重新添加。