smtp/mime



  • ok ich zieh mir erstmal die rfcs rein

    btw. was is ein octet?



  • Ein Byte (8 Bit)



  • ach octal->acht... argh warum sagen die ned byte dazu ?



  • weil ein byte nicht ein octet groß sein muss.

    (siehe wieder 7Bit vs 8Bit Problematik :))



  • nagut hast recht

    gibts irgendwo n online glossar mit englischen programmier fachwörtern?



  • mit folgenden Links solltest du ohne Probleme die Texte lesen können:
    http://foldoc.doc.ic.ac.uk/foldoc/index.html
    http://dict.leo.org/
    http://de.wikipedia.org/wiki/Hauptseite



  • so base64 encoding is fertig
    outlook frissts.. optimierungstips willkommen

    -gibts eigentlich auch argumente die dagegen sprechen alles als base64 oder qprintable zu verschicken?

    -was bedeuten eigentlich die ganzen iso varianten -1,-2,-3...?

    QString XPutMail::ToBase64(QString sData)
    {
      PUT_STATUS("encoding mailcontent to base64")
      PUT_STRING(sData)
    
      QString sResult;
      int i=0;
      unsigned char* p8BitCurrent=0;
      unsigned char* p7BitCurrent=0;
    
      const char* pDataBegin=sData.data();
    
      long lNumPackage=sData.length()/PACKAGE_LEN_8BIT;
      long lClosingPackage=(sData.length() % PACKAGE_LEN_8BIT == 0)?0:1;
      lNumPackage+=lClosingPackage;
      long lNumEncodedBytes=lNumPackage*PACKAGE_LEN_7BIT;
    
      unsigned char *s7Bit=new unsigned char [lNumEncodedBytes+1];
      memset(s7Bit,'\0',lNumEncodedBytes+1);
    
      for(i=0;i< ((lClosingPackage)?lNumPackage-1:lNumPackage) ;i++)
      {
        p8BitCurrent=(unsigned char*)pDataBegin+(i*PACKAGE_LEN_8BIT);
        p7BitCurrent=s7Bit+(i*PACKAGE_LEN_7BIT);
    
        p7BitCurrent[0]=(p8BitCurrent[0] & 0xFC)>>2;
        p7BitCurrent[1]=(((p8BitCurrent[0] & 0x3)<<4) | ((p8BitCurrent[1] & 0xF0)>>4));
        p7BitCurrent[2]=(((p8BitCurrent[1] & 0xF)<<2) | ((p8BitCurrent[2] & 0xC0)>>6));
        p7BitCurrent[3]=((p8BitCurrent[2] & 0x3F));
      }
    
      if(lClosingPackage)
      {
        p8BitCurrent=(unsigned char*)pDataBegin+((lNumPackage-1)*PACKAGE_LEN_8BIT);
        p7BitCurrent=s7Bit+((lNumPackage-1)*PACKAGE_LEN_7BIT);
    
        switch(sData.length() % PACKAGE_LEN_8BIT)
        {
        case 1://8bit left
        {
          p7BitCurrent[0]=(p8BitCurrent[0] & 0xFC)>>2;
          p7BitCurrent[1]=(p8BitCurrent[0] & 0x3)<<4;
          p7BitCurrent[2]=BASE64_CLOSING_CHAR;
        }
          break;
        case 2://16bit left
        {
          p7BitCurrent[0]=(p8BitCurrent[0] & 0xFC)>>2;
          p7BitCurrent[1]=(((p8BitCurrent[0] & 0x3)<<4) | ((p8BitCurrent[1] & 0xF0)>>4));
          p7BitCurrent[2]=(p8BitCurrent[1] & 0xF)<<2;
        }
          break;
        default:
          PUT_ERROR("fatal encoding error")
          assert(0!=0);
          break;
        }
        p7BitCurrent[3]=BASE64_CLOSING_CHAR;
      }
    
      for(i=0;i<lNumEncodedBytes;i++)
      {
        assert(s7Bit[i]<LEN_BASE64_CHARS);
        s7Bit[i]=cuteMailWindow::Base64Chars[s7Bit[i]];
      }
      sResult=(char*)s7Bit;
      delete [] s7Bit;
    
      PUT_STATUS("encoding done")
      PUT_STRING(sResult)
    
      return sResult;
    }
    


  • Sovok schrieb:

    -gibts eigentlich auch argumente die dagegen sprechen alles als base64 oder qprintable zu verschicken?

    Na ja, es ist nicht verboten. Aber wenn man sollte wichtige Binär-Daten nicht mit QP verschicken, da die evtl. etwas anders dekodiert werden könnten. Für das Auge nich ungedingt sichtbar, aber der Hex-Code unterscheidet sich dann ein wenig.

    Lesbaren Text mit Base64 zu kodieren hat den Nachteil, dass 1. der Text evtl. länger wird, als mit QP und 2. Kann man den Text kodiert nicht mehr lesen, was mit QP aber noch möglich ist.



  • die qp beschreibung im rfc find ich arg knapp
    kennst du da noch ne etwas ausführlichere?



  • Was brauchst dennn da ausführlicher? In der RFC ist doch alles gesagt. Anonsten google mal danach. Da lässt sich sicherlich was finden.


Anmelden zum Antworten