2017-04-26 12 views
0

私は自分のImapライブラリをC#で作成しようとしていますが、これまでに試したすべてのこと(接続、ログイン、リスト、選択、フェッチなど)ができました。IMAPマルチワードメールボックスの選択

しかし、名前に複数の単語を含むメールボックスを選択する際に問題があります。

たとえば、メールボックス名 "New Label"は選択できませんが、 "INBOX"は正常に選択されています。

0002 LIST "" "%" 
* LIST (\HasNoChildren) "/" "INBOX" 
* LIST (\HasNoChildren) "/" "New" 
* LIST (\HasNoChildren) "/" "New Label" 
* LIST (\HasChildren \Noselect) "/" "[Gmail]" 
0002 OK Success 

0003 SELECT INBOX 
0003 OK [READ-WRITE] INBOX selected. (Success) 

0004 SELECT New Label 
0004 BAD Could not parse command 

IMAP仕様(RFC 3501 5.1メールボックス命名)は、これが扱われるべき方法を参照しません。 5.1.3という国際的な名前付けについて言及していますが、US-ASCIIの印刷可能文字はそれ自体を表しています。

this questionの答えは、メールボックス名にスペースを入れて送信する必要があることを示していますが、私のケースでは明らかに機能しません。

public ResponseStatusEnum sendCommandReceiveResponse(out List<String> responseArray, string command, params string[] cmdParams) 
    { 
     ResponseStatusEnum response; 
     if (command == null) throw new Exception("No command passed in to send to the server"); 
     // Increment the id before getting the id string 
     m_nCommandId++; 
     StringBuilder sbCommand = new StringBuilder(CommandId + " "); 

     // Include the Imap command 
     sbCommand.Append(command); 

     //Include the parameters specific to the command 
     for (int i = 0; i < cmdParams.Length; i++) 
     { 
      sbCommand.Append(" " + cmdParams[i]); 
     } 
     sbCommand.Append(ImapEol); 

答えて

1

は、RFC 3501がそれを指定しない、87ページを指定の最初の行:

この

は、私は(私がこれまで試してみましたすべてのコマンドを使用して、正常に動作します)コマンドを作成するために使用していたコードですastring構文が使用されることを意味します。 aStringのは、IMAPに多くのことに使用され、この場合にはそれだけですされます。Do構文でのAString /文字列/ nstring /リテラル​​の作品を読んで

0004 SELECT "New label" 

、あなたは右の解析するためにそれらを取得する必要がありますまたは世界の舞台を超えてIMAPを生成することができます。または、アウトソーシングする場合はライブラリを使用してください。C#には素晴らしいライブラリがあります。

+0

ご質問ありがとうございます。ありがとうございます。ありがとうございます。ありがとうございます。私は非常に基本的なことをしています(IMAPに慣れたい)ので、私は図書館に行かないことにしました。 – havan

+0

私はあなたがそういうことをしていると思っていました。 Mailkitのソースコードも面白いかもしれませんが、それはC#で書かれています。 – arnt

+0

Fwiw、MailKitのソースコードはhttps://github.com/jstedfast/MailKitにあります。 – jstedfast

関連する問題