2010-06-08 181 views
6

我已經使用CodeProject的開放源代碼從收到的郵件服務器(POP服務器)讀取郵件。代碼可以在以下位置找到:http://www.codeproject.com/KB/IP/Pop3MimeClient.aspx從收到的郵件服務器(POP)讀取郵件

到目前爲止它工作正常;我可以閱讀電子郵件。

我使用此代碼的目的是從POP服務器檢索電子郵件並處理它們。

我的問題是: 如果我使用Gmail的pop服務器「pop.gmail.com」並運行應用程序,我只收到自從上次運行應用程序以來我沒有檢索到的那些電子郵件。但是,如果我每次運行應用程序時使用我的客戶端的POP服務器,我都會收到pop服務器中的所有電子郵件。

例如:
如果我使用Gmail POP服務器:pop.gmail.com
我在POP服務器的三封郵件。 我還沒有運行應用程序。我正在運行該應用程序的第一次。 應用程序讀取電子郵件;這次我會收到所有三封電子郵件。 我第二次運行應用程序;我的應用程序不會閱讀任何電子郵件,因爲我已經閱讀了3個現有的電子郵件。 這很好;這就是我要的。

現在我發送郵件到pop.gmail.com。 我第三次再次運行該應用程序;這次我只會收到剛剛到達的電子郵件,這是第四個。這是很好的行爲;這就是我要的。

但是,如果我用我的客戶的POP服務器:
無論多少次我運行應用程序時,它讀取在郵件箱中的所有電子郵件。

這會對我造成一個問題,因爲我正在考慮構建一個窗口服務,它將從pop服務器讀取電子郵件並處理它們。該服務將持續運行。我將在POP服務器中處理電子郵件,然後讓我們休息1分鐘,然後再處理電子郵件。如果從CodeProject下載的應用程序始終讀取所有電子郵件,則我的客戶郵箱在此郵箱中可能具有數千個電子郵件,因此這對我來說不可行。

在我的客戶端的POP服務器上是否有一些設置可以讓我的應用程序僅檢索自上次運行服務以來我沒有閱讀過的那些電子郵件?

回答

3

請勿將Gmail的POP或IMAP實現用作規範;這兩種協議對於Gmail帳戶的行爲都與其他服務器幾乎不同。

要回答你的問題,你有兩種方法,你可以採取:

  1. 記住,你已經看到了消息的消息ID的軌道,而忽略他們在隨後的連接(這將離開的消息在另一個客戶端上下載服務器)。
  2. 下載消息後發出DELE命令,消息將從服務器中刪除它。
+0

+1非常好的答案。 – adatapost 2010-06-08 11:11:09