2016-07-17 7 views
0

wenn ich anfügen versuchen Befehl in C# zu sehen Code:GMail IMAP Anfügen {Länge}

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"; 
    } 

Es sagt, BAD nicht Befehl nicht analysieren. Es stürzt auf Encoding.UTF8.GetByteCount (Befehl) ab, es bekommt die Länge 162, aber wenn ich 160 versuche, funktioniert es. Gmail wird einfach nicht zustimmen was ich zähle und dann hört es auf zu arbeiten.

Antwort

1

Ihr Befehl ist tatsächlich falsch; Sie müssen das Literal, dann CRLF senden, dann warten, bis der Server Ihnen sagt, dass Sie mehr senden sollen, und dann den Körper senden.

Etwas wie {3}foo ist falsch, es sollte {3}\r\n sein, warten Sie, bis der Server Ihnen sagt, gehen Sie weiter, foo.

+0

Wie Sie sehen können, habe ich eine Variable n, die Environment.Newline zugewiesen ist. Ich benutze es, bevor ich foo sende. –

+0

Die Sache ist, dass was Leute zählen als 3 Zeichen (foo), Google Mail tut es tatsächliche Zeichen minus 2, dann funktioniert es. –

+0

Ist Environment.Newline variabel abhängig von der Plattform? IMAP sollte IMMER verwenden \ r \ n. – Max

Verwandte Themen