检索未读电子邮件并将其在收件箱中保留为未读
Retrieve unread emails and leave them as unread in inbox
我正在使用 GemBox.Email 并且我正在从我的收件箱中检索未读的电子邮件,如下所示:
using (var imap = new ImapClient("imap.gmail.com"))
{
imap.Connect();
imap.Authenticate("username", "password");
imap.SelectInbox();
IEnumerable<string> unreadUids = imap.ListMessages()
.Where(info => !info.Flags.Contains(ImapMessageFlags.Seen))
.Select(info => info.Uid);
foreach (string uid in unreadUids)
{
MailMessage unreadEmail = imap.GetMessage(uid);
unreadEmail.Save(uid + ".eml");
}
}
代码来自 Receive 示例,但问题是在检索它们之后,它们最终在我的收件箱中被标记为已读。
如何防止这种情况发生?
我想用 ImapClient
下载它们并在电子邮件服务器上将它们保留为未读状态。
编辑 (2021-01-19):
请使用 BugFixes page or from NuGet 中的最新版本重试。
最新版本提供了ImapClient.PeekMessage
方法,您可以这样使用:
using (var imap = new ImapClient("imap.gmail.com"))
{
imap.Connect();
imap.Authenticate("username", "password");
imap.SelectInbox();
foreach (string uid in imap.SearchMessageUids("UNSEEN"))
{
MailMessage unreadEmail = imap.PeekMessage(uid);
unreadEmail.Save(uid + ".eml");
}
}
原版:
在检索电子邮件时,大多数服务器会将其标记为“SEEN”标志。如果您想将电子邮件保留为未读状态,则只需删除该标志即可。
此外,您可以使用 ImapClient.SearchMessageUids
来获取未读电子邮件的 ID,而不是使用 ImapClient.ListMessages
。
所以,请尝试以下操作:
using (var imap = new ImapClient("imap.gmail.com"))
{
imap.Connect();
imap.Authenticate("username", "password");
imap.SelectInbox();
// Get IDs of unread emails.
IEnumerable<string> unreadUids = imap.SearchMessageUids("UNSEEN");
foreach (string uid in unreadUids)
{
MailMessage unreadEmail = imap.GetMessage(uid);
unreadEmail.Save(uid + ".eml");
// Remove "SEEN" flag from read email.
imap.RemoveMessageFlags(uid, ImapMessageFlags.Seen);
}
}
我正在使用 GemBox.Email 并且我正在从我的收件箱中检索未读的电子邮件,如下所示:
using (var imap = new ImapClient("imap.gmail.com"))
{
imap.Connect();
imap.Authenticate("username", "password");
imap.SelectInbox();
IEnumerable<string> unreadUids = imap.ListMessages()
.Where(info => !info.Flags.Contains(ImapMessageFlags.Seen))
.Select(info => info.Uid);
foreach (string uid in unreadUids)
{
MailMessage unreadEmail = imap.GetMessage(uid);
unreadEmail.Save(uid + ".eml");
}
}
代码来自 Receive 示例,但问题是在检索它们之后,它们最终在我的收件箱中被标记为已读。
如何防止这种情况发生?
我想用 ImapClient
下载它们并在电子邮件服务器上将它们保留为未读状态。
编辑 (2021-01-19):
请使用 BugFixes page or from NuGet 中的最新版本重试。
最新版本提供了ImapClient.PeekMessage
方法,您可以这样使用:
using (var imap = new ImapClient("imap.gmail.com"))
{
imap.Connect();
imap.Authenticate("username", "password");
imap.SelectInbox();
foreach (string uid in imap.SearchMessageUids("UNSEEN"))
{
MailMessage unreadEmail = imap.PeekMessage(uid);
unreadEmail.Save(uid + ".eml");
}
}
原版:
在检索电子邮件时,大多数服务器会将其标记为“SEEN”标志。如果您想将电子邮件保留为未读状态,则只需删除该标志即可。
此外,您可以使用 ImapClient.SearchMessageUids
来获取未读电子邮件的 ID,而不是使用 ImapClient.ListMessages
。
所以,请尝试以下操作:
using (var imap = new ImapClient("imap.gmail.com"))
{
imap.Connect();
imap.Authenticate("username", "password");
imap.SelectInbox();
// Get IDs of unread emails.
IEnumerable<string> unreadUids = imap.SearchMessageUids("UNSEEN");
foreach (string uid in unreadUids)
{
MailMessage unreadEmail = imap.GetMessage(uid);
unreadEmail.Save(uid + ".eml");
// Remove "SEEN" flag from read email.
imap.RemoveMessageFlags(uid, ImapMessageFlags.Seen);
}
}