0

これは、メールを削除するための私のコードです。しかし、それは機能していません。

 public object Delete(int index)
        {
            StreamWriter.WriteLine("$ DELE {0}"+index);
            StreamWriter.Flush();
            return Response();    
        }
private string Response()
        {
            byte[] data = new byte[TcpClient.ReceiveBufferSize];
            int ret = NetworkStream.Read(data, 0, data.Length);
            return Encoding.ASCII.GetString(data).TrimEnd();
        }
4

1 に答える 1

1

これら 2 つの項目を一緒に追加する理由:

StreamWriter.WriteLine("$ DELE {0}"+index);

確かにあなたはこのようなことを意味します:

StreamWriter.WriteLine(String.Format("$ DELE {0}",index));

とにかく、これは有効な IMAP コマンドのようには見えません。これは POP に似ていますが$、コマンド文字列に a を含めないでください。どの仕様に従っていますか?

POP3 サーバーに接続している場合、コマンドは次のようになります。

StreamWriter.WriteLine(String.Format("DELE {0}",index));

IMAP サーバーに接続している場合、メッセージを削除するには、まずメッセージに削除済みのフラグを立ててから消去する必要があると思います。また、IMAP のすべてのコマンドには、生成する必要がある一意の識別子が必要です。仕様から:

各クライアント コマンドには、「タグ」と呼ばれる識別子 (通常、A0001、A0002 などの短い英数字の文字列) がプレフィックスとして付けられます。コマンドごとに異なるタグがクライアントによって生成されます。

次に、メッセージに削除済みのフラグを付けるには、次のようにします。

A003 STORE 35 +FLAGS (\Deleted)

A003はタグのプレフィックス、は35削除するメッセージのシーケンス番号です。しかし、フラグ付きのメッセージをすべて完全に削除するには、次のように送信してEXPUNGEコマンドを実行する必要があります。

A004 EXPUNGE

メッセージのシーケンス番号が変更される可能性があるため、コマンドの完了EXPUNGE後に特定のシーケンス番号に関連付けられたメッセージが同じになるとは限りません。EXPUNGE

于 2013-05-31T10:58:50.677 に答える