Ae.Net.Mail - IMAP - 只获取看不见的消息

时间:2014-07-11 14:20:36

标签: c# asp.net gmail-imap

我有一个使用带有G-mail的AE.Net.Mail IMAP客户端的Windows服务。该服务每隔x分钟运行一次,检索收件箱消息,应用一些业务逻辑,并将其标记为已删除。这一切都有效。

但是,Gmail会将其留在收件箱中,以便后续调用再次获取它们。我可以通过查看Seen或Deleted标志来跳过它们,但我根本不会得到它们。除非有人进入并清理收件箱,否则频繁提取会以指数方式增长。

我已尝试使用Gmails删除选项,但它们似乎没有任何效果。

3 个答案:

答案 0 :(得分:3)

我知道这个帖子有点旧,但万一有人想找到办法,可以尝试:

ImapClient ic = new ImapClient("imap.gmail.com", "name@gmail.com", "pass", AuthMethods.Login, 993, true);
var mailMessage = ic.SearchMessages(SearchCondition.Unseen(), false, true).ToList();

现在,您可以遍历mailMessage以查找未读电子邮件。

答案 1 :(得分:2)

我决定在检索它们时将它们过滤掉。不理想,但它有效

 List<AE.Net.Mail.MailMessage> mm = _client.GetMessages(0, 10, false, false)
                                            .Where(m => !m.Flags.HasFlag(Flags.Seen) 
                                                   && !m.Flags.HasFlag(Flags.Deleted)).ToList();

答案 2 :(得分:0)

我知道这是一个过时的帖子,但是万一有人正在寻找一种方法可以尝试移动:

AE.Net.Mail.Imap.Mailbox[] mailBoxes = client.ListMailboxes(string.Empty, "*");
                        bool existeMailBoxArquivo = false; 
const string ARQUIVO = "ARQUIVO";

                        foreach (var mailBox in mailBoxes)
                        {
                            if (mailBox.Name == ARQUIVO)
                                existeMailBoxArquivo = true;
                        }
                        if (!existeMailBoxArquivo)
                            client.CreateMailbox(ARQUIVO);
                        client.MoveMessage(msg.Uid, ARQUIVO);

因此,您将邮件移动到文件夹中,然后再次浏览时,只需选择要搜索的主框即可