检查未读电子邮件

时间:2010-10-24 02:05:52

标签: c# email imap

我正在寻找一种方法来检查电子邮件帐户中未读电子邮件的数量。 有什么提示吗?

编辑:如标签中所述,对于C#。当我了解IMAP是要走的路时,我确认我要使用的所有电子邮件帐户都已启用IMAP:)

3 个答案:

答案 0 :(得分:4)

<强> POP

You can use OpenPOP.net使用POP协议阅读电子邮件。 POP的问题在于它无法保存是否未读的详细信息。所以我认为这对你没有多大用处。您有自己的方式下载和标记电子邮件为已读或未读。

<强> IMAP

This question in SO有一些使用IMAP的示例链接。 IMAP有关于邮件状态的详细信息(已读/未读)。

请详细说明您的要求。

答案 1 :(得分:1)

以下是LumiSoft IMAP库的代码示例:

using LumiSoft.Net.IMAP;
using LumiSoft.Net.IMAP.Client;
using LumiSoft.Net;

...

using (IMAP_Client client = new IMAP_Client())
{
    client.Connect("imap.gmail.com", 993, true);
    client.Login("your.username@gmail.com", "your_cool_password");
    client.SelectFolder("INBOX");

    IMAP_SequenceSet sequence = new IMAP_SequenceSet();
    //sequence.Parse("*:1"); // from first to last

    IMAP_Client_FetchHandler fetchHandler = new IMAP_Client_FetchHandler();

    fetchHandler.NextMessage += new EventHandler(delegate(object s, EventArgs e)
    {
        Console.WriteLine("next message");
    });

    fetchHandler.Envelope += new EventHandler<EventArgs<IMAP_Envelope>>(delegate(object s, EventArgs<IMAP_Envelope> e){
        IMAP_Envelope envelope = e.Value;
        if (envelope.From != null && !String.IsNullOrWhiteSpace(envelope.Subject))
        {
            Console.WriteLine(envelope.Subject);
        }

    });

    // the best way to find unread emails is to perform server search

    int[] unseen_ids = client.Search(false, "UTF-8", "unseen");
    Console.WriteLine("unseen count: " + unseen_ids.Count().ToString());

    // now we need to initiate our sequence of messages to be fetched
    sequence.Parse(string.Join(",", unseen_ids));

    // fetch messages now
    client.Fetch(false, sequence, new IMAP_Fetch_DataItem[] { new IMAP_Fetch_DataItem_Envelope() }, fetchHandler);

    // uncomment this line to mark messages as read
    // client.StoreMessageFlags(false, sequence, IMAP_Flags_SetType.Add, IMAP_MessageFlags.Seen);
}

有点复杂,但工作正常。 Limisoft库并不完美,所以一定要测试一下。

答案 2 :(得分:1)

如果您要做的是获取IMAP文件夹中未读邮件的数量,您可以使用MailKit执行此操作:

TypeProxy

...

using MailKit;
using MailKit.Search;
using MailKit.Net.Imap;