2017-05-11 77 views
1

MailKitのlibで作業していて問題があります。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(); 
} 

それはOK実行されますが、Gmailは上の会話ビュー=スレッドビューを設定するときに同じ電子メールの件名と同じ送信者を持っている場合は、削除としてマークされたメッセージは、受信トレイにcombackます。次回のIカウントメッセージでは、削除メッセージはすべて再カウントされます。それを避ける方法は? (削除メッセージのUidを保存するのも片方ですが、メッセージ番号が増えると処理が遅くなります)

ありがとうございました。

答えて

1

Gmailは他のほとんどのIMAPサーバーと同じように動作しないので、メッセージを\ Deletedとしてマークすると、自動的にゴミ箱フォルダに移動さ​​れるため、Expungeは何もしません。

あなたがする必要があるのは、Gmailの設定に行き、メッセージをゴミ箱に移動しないようにIMAPアカウントの動作を変更することです。

ゴミ箱フォルダ内のメッセージのUIDを取得できるように、ゴミ箱フォルダへのメッセージをMoveTo()するか(ヒント: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

はありがとうを。私はあなたの提案に従って、この問題を解決しました。 しかし、私はヤフーのメールを使用しています。 'IMAPサーバはSPECIAL-USEもXLIST拡張もサポートしていません。 ' 特別なフォルダを取得することをサポートしていないメールサーバでは、どうすればいいですか?それを行う? – user1234

+0

この場合、私は通常AddFlagsとExpungeを使います。それは今働いているようだ。 – user1234

+0

pop3についてはどうですか?私はメッセージを削除するために 'DeleteMessage'を呼び出すことを知っていますが、' Conversation View = Conversation view on'のときに削除されたメッセージは受信ボックスに戻って再びカウントされます。これを避ける方法は? – user1234

関連する問題