C# Po3協議讀取郵件內容遇到的問題


背景:最近在做一個小工具,讀取PO3協議郵件服務器的指定人員的郵件,東西做出來了,弄了一個While死循環,20秒執行一次,

結果運行了3天,周一來IT人員找上門來了,你的電腦什么情況,怎么一個小時下載流量達到1個G多,而且都是PO3協議的,哈哈,哈哈

心理很想呵呵,但是還得如實跟他解釋了一下情況,然后立刻把程序停止了。

接下來我就是找問題啦,最后找到了原因是因為我每次都是循環讀取郵箱中的180條郵件,這180條中還有好多有幾十兆附件的,哈哈

解決辦法和問題原因:

問題就出現這循環讀取以及讀取過的內容里面,因為PO3協議不支持讀取未讀的郵件,或是說標記郵件為已讀的。所以我當時只能從所有郵件中不斷重復循環讀取,

直到有新的需要的郵件進來,處理一下,繼續循環。后來我找到了一個辦法,POP3協議有一個UID的東西,每個郵件都是唯一的,每次都獲取到郵箱所有郵件的UID,

然后保存到本地,下次用本地的和這個對比,有新的UID進來,只針對這個新的UID進行郵件讀取,這樣所有事就都解決了,流量也很小很小了。

我這里使用的是MailKit.dll,

開源的項目,在項目中用nuget一下DLL下載下來,nuget命令去官網看吧。

粘貼出來主要代碼:

           IList<string> msgUids = client.GetMessageUids();
                    IList<string> notReadUids = new List<string>();
                    foreach (var item in msgUids)
                    {
                        if (!alreadySentMsgId.Contains(item))
                        {
                            notReadUids.Add(item);
                            sw.WriteLine(item);  //記錄沒有讀取過的郵件的UID
                        }
                    }
                    if (notReadUids.Count != 0) //如果有未讀過的郵件才進行讀取及解析
                    {
                        IList<MimeMessage> notReadMessages = client.GetMessages(notReadUids);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM