2017-05-11 81 views
1

上的對話視圖我正在使用MailKit庫並出現問題。MailKit:消息不會從Gmail郵箱設置收件箱中刪除

我的應用程序被讀取在收件箱(Gmail)中指定電子郵件,並刪除它們。

IList<UniqueId> listUid = inbox.Search(query); 
for (int i = 0; i < listUid.Count; i++) 
{ 
    var message = inbox.GetMessage(listUid[i]); 
    inbox.AddFlags(msg.Uid, MessageFlags.Deleted, true); 
    inbox.Expunge(); 
} 

它運行正常,但是當在Gmail設置的對話視圖=會話視圖,即標記爲刪除將在收件箱中,如果有相同的電子郵件主題和發件人相同的comback消息。在下一次我計算消息時,所有的刪除消息將被重新計數。如何避免它? (保存刪除消息的UID是一種方式,但是當消息號增加時,處理會變慢)

非常感謝。

回答

1

不幸的是,GMail與大多數其他IMAP服務器的行爲不一樣,所以當您將郵件標記爲\已刪除時,它會自動移至垃圾箱文件夾,因此「清除」功能不會執行任何操作。

您需要做的是轉到GMail設置並更改您的IMAP帳戶的行爲,以便它不會將郵件移動到垃圾箱。

或者將郵件或MoveTo()郵件自己發送到垃圾箱文件夾,以便您可以在垃圾箱文件夾中獲取郵件的UID(提示:使用MoveTo()方法的返回值),然後打開垃圾箱文件夾並從那裏刪除郵件。

注意:此代碼是未經測試,但它應該是這個樣子:

var trash = client.GetFolder (SpecialFolder.Trash); 
var moved = client.Inbox.MoveTo (uid, trash); 
if (moved.HasValue) { 
    trash.Open (FolderAccess.ReadWrite); 
    trash.AddFlags (moved.Value, MessageFlags.Deleted, true); 
    trash.Expunge (new [] { moved.Value }); 
} 
+0

謝謝。我遵循你的建議並解決了這個問題。 但是當我使用雅虎電子郵件。 'var trash = client.GetFolder(SpecialFolder.Trash);'已經拋出異常 'IMAP服務器不支持SPECIAL-USE和XLIST擴展.' 使用不支持獲取特殊文件夾的郵件服務器,去做? – user1234

+0

我認爲在這種情況下,我會正常使用'AddFlags'和'Expunge'。現在看來工作。 – user1234

+0

pop3怎麼樣?我知道調用'DeleteMessage'來刪除一條消息,但是當'會話視圖=對話視圖'時,已經被刪除的消息將回到收件箱並再次計數。如何避免這一點? – user1234