2010-10-24 148 views
4

我正在尋找一種方法來檢查電子郵件帳戶上未讀電子郵件的數量。 任何提示?檢查未讀電子郵件

編輯:如標籤所述,爲C#。當我瞭解IMAP是要走的路,我確認所有電子郵件帳戶,我將使用具有IMAP激活:)

+2

您需要包括更多信息。你已經將它標記爲C#,所以我們可以認爲這是有問題的編程語言,但是你需要指定郵件協議(POP,IMAP,Exchange,...) – greg 2010-10-24 02:08:33

回答

4

POP

You can use OpenPOP.net讀取使用POP協議電子郵件。 POP的問題在於它沒有保存它是否未讀的細節。所以我認爲這對你沒有多大用處。您有自己的方式來下載和標記已讀或未讀的電子郵件。

IMAP

This question in SO有使用IMAP的例子一些鏈接。 IMAP具有關於郵件狀態的詳細信息(讀取/未讀取)。

請詳細解釋您的要求。

+0

我編輯了我的問題。我將檢查IMAP鏈接,並將其視爲回答,如果這是要走的路。現在感謝。 – Qosmo 2010-10-24 03:13:10

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("[email protected]", "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圖書館並不完美,所以請確保您對它進行了很好的測試。

0

如果你想要做的就是讓IMAP文件夾中的未讀郵件的數量,你可以使用MailKit做到這一點:

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

...

using (var client = new ImapClient()) { 
    // Note: depending on your server, you might need to connect 
    // on port 993 using SecureSocketOptions.SslOnConnect 
    client.Connect ("imap.server.com", 143, SecureSocketOptions.StartTls); 

    // Note: use your real username/password here... 
    client.Authenticate ("username", "password"); 

    // open the Inbox folder... 
    client.Inbox.Open (FolderAccess.ReadOnly); 

    // search the folder for new messages (aka recently 
    // delivered messages that have not been read yet) 
    var uids = client.Inbox.Search (SearchQuery.New); 

    Console.WriteLine ("You have {0} new message(s).", uids.Count); 

    // ...but maybe you mean unread messages? if so, use this query 
    uids = client.Inbox.Search (SearchQuery.NotSeen); 

    Console.WriteLine ("You have {0} unread message(s).", uids.Count); 

    client.Disconnect (true); 
}