2016-07-17 6 views
0

私はC#でコマンドを追加しようとすると、コードを参照してください。それはBADコマンドを解析できなかった、と言うGmailのIMAP追加{}な長さ

private readonly string n = Environment.NewLine; 
public string CreateDraft() 
    { 
     string output; 
     string command = "MIME-Version: 1.0" + n + 
         "From: [email protected]" + n + 
         "To: [email protected]" + n + 
         "Subject: " + machineId + n + 
         "Content-Type: text/plain; charset=utf-8" + n + 
         "TESTING" + n; 
     output = ReceiveResponse("$$ APPEND [Gmail]/Drafts (\\Draft) {" +  Encoding.UTF8.GetByteCount(command) + "}" + n); 

     output += n + ReceiveResponse(command); 

     return output; 
    } 

private string ReceiveResponse(string command) 
    { 
     try 
     { 
      if (InternetIsConnected() == true) 
      { 
       if (!(tcpc.Connected)) 
       { 
        Connect(); 
       } 

       if (tcpc.Connected) 
       { 
        dummy = Encoding.ASCII.GetBytes(command); 
        ssl.Write(dummy, 0, dummy.Length); 
        ssl.Flush(); 

        response = ""; 

        do 
        { 
         bytes = ssl.Read(buffer, 0, buffer.Length); 
         Decoder decoder = Encoding.UTF8.GetDecoder(); 
         char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)]; 
         decoder.GetChars(buffer, 0, bytes, chars, 0); 

         response += new string(chars); 
        } while (response.Contains("$$") == false && (response.Contains("+") == false)); 

        return response; 
       } 

       return "Failure: Terminal Disconnected"; 
      } 
     } 
     catch (Exception ex) 
     { 
     } 

     return "Failure"; 
    } 

を。 Encoding.UTF8.GetByteCount(コマンド)でクラッシュしますが、長さは162になりますが、160を試しても機能します。 GMAILはちょうど私が数えているものに同意しないでしょう、そしてそれは働くのを止めます。

答えて

1

あなたのコマンドは実際には間違っています。リテラル、次にCRLFを送信してから、サーバーがあなたにもっと送信するように指示してから本文を送信するまで待つ必要があります。

{3}fooのようなものは間違っていますが、それは{3}\r\nである必要があります。サーバーがあなたに行くように伝えるのを待ちます(foo)。

+0

ご覧のとおり、変数nにはEnvironment.Newlineが割り当てられています。私はfooを送る前にそれを使う。 –

+0

これは、3文字(foo)とみなす人は、実際の文字から2を引いたものです。 –

+0

Environment.Newline変数はプラットフォームによって異なりますか? IMAPは常に\ r \ nを使用する必要があります。 – Max

関連する問題