2014-02-05 27 views
0
using System; 
using Limilabs.Mail; 
using Limilabs.Client.POP3; 

class Program 
{ 
    static void Main(string[] args) 
    { 

     using (System.IO.StreamWriter file = new  System.IO.StreamWriter(@"C:\Users\*******\Desktop\WriteLines.txt", true)){ 

      using (Pop3 pop3 = new Pop3()) 
      { 

       Console.WriteLine("Connecting..."); 

       pop3.ConnectSSL("pop3.live.com"); // or ConnectSSL for SSL 
       pop3.Login("****@live.com", "****"); 

       // Receive all messages and display the subject 
       MailBuilder builder = new MailBuilder(); 
       foreach (string uid in pop3.GetAll()) 
       { 
        IMail email = builder.CreateFromEml(
        pop3.GetMessageByUID(uid)); 

        file.WriteLine("Header: " + email.Subject); 
        file.WriteLine("Message: " + email.Text); 

       } 

       pop3.Close(); 

      } 

     } 
    } 
}  

所以我有這個問題,我想這個程序運行24/7;它仍然是不完整的,但這只是顯示基本的C#檢索電子郵件等。我如何才能在C#中有一個循環,只有當新郵件到達收件箱時纔會暫停或強制執行任何操作?我希望該計劃僅用於實時收到發送的電子郵件。我知道我可以一次一個地打印出我的電子郵件,但我希望它能夠正常運行,並且只有在收到新消息時才能讓我做任何事情。例如idk,如果我要發送一個類似乾淨的桌面的消息,它會停下來並被解析,如果我要創建另一個程序指定的有效命令序列,那麼它將執行該命令,然後繼續循環不斷等待另一條新消息。它基本上是一個全天候運行的服務器,只響應新的電子郵件。這就是我要做的。所有的幫助非常感謝。如何在C#中循環直到新郵件到達?

+4

「我怎麼能在C#中有一個循環,只有當新電子郵件到達收件箱時纔會暫停或強制執行任何操作。」 - 這是您的電子郵件庫必須直接支持的內容。 (在POP3中我並不認爲這是可能的。)否則,您唯一的選擇就是輪詢。 – millimoose

+0

相當大量的代碼後面跟着一段文字。這使得難以閱讀的問題。首先將你的文本分成幾段?另外,請確保你的代碼示例是最小的(同時還包括所有相關的細節)。 –

回答

0

Pop3是一個輪詢協議。它不允許通知您新郵件已到達。你必須例如支持這個afaik的Exchange協議。因此,對於POP3郵箱,郵件程序通常每次輪詢新郵件。 15分鐘。我懷疑你的POP3庫不直接支持。因此,您將不得不使用Timer類並輪詢新電子郵件。

Timer類

的文件可以在MSDN庫中找到: http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.110%29.aspx

0

你可能會想使用windows service來輪詢您的電子郵件收件箱。

有人問到過類似的問題,如何做到這一點here。其中一個答案爲如何做到這一點提供了一個很好的佈局。此外,如果您嘗試讓您的網站執行此功能(因爲您無權訪問安裝Windows服務),您可以使用突出顯示的this question