smtp/mime



  • crc oder md5 benutzt mime doch garned

    Conversion values or Content Transfer Encodings.
    7BIT //jedes 8te bit is nutzlos/ascii?
    8BIT //1:1 senden/empfangen ?
    BASE64 //is klar
    BINARY //wie??
    QUOTED-PRINTABLE //wie??

    MIME content-types sind nur zur info des clients und ham nix mit den daten zu tun oder?

    wie isses mit den verschiedenen iso typen... was muss man anders machen wenn es statt typ1 typ2 is... wofür sind die diversen isos überhaupt gut?



  • quoted-printable ist genau wie base64 eine Methode um 8Bit Zeichen auf 7Bit abzubilden.

    7BIT //jedes 8te bit is nutzlos/ascii?
    8BIT //1:1 senden/empfangen ?

    nein 7Bit ist die richtige Zeichengröße. 8Bit kann SMTP Server oder Mail Clients verwirren. Deswegen gibt es ja Base64 und Quoted-Printable um 8Bit auf 7Bit umzurechnen



  • kingruedi schrieb:

    quoted-printable ist genau wie base64 eine Methode um 8Bit Zeichen auf 7Bit abzubilden.

    7BIT //jedes 8te bit is nutzlos/ascii?
    8BIT //1:1 senden/empfangen ?

    nein 7Bit ist die richtige Zeichengröße. 8Bit kann SMTP Server oder Mail Clients verwirren. Deswegen gibt es ja Base64 und Quoted-Printable um 8Bit auf 7Bit umzurechnen

    heisst dass ich bekomm als client sowieso nie 8bit daten rein? warum gibts das dann überhaupt als mime typ?

    unterscheidet sich Quoted-Printable irgendwie von base64?

    mit jedes 8te bit is nutzlos meinte ich, ob ich beim empfangen immer 7 bit abgreife , in ein byte stecke, die nächsten 7 bit hole usw. stimmt das ned?



  • Sovok schrieb:

    @nuke thx

    kingruedi schrieb:

    nein, base64 rechnet 8bit auf 7bit runter (3 8Bit Zeichen werden zusammengefasst und auf 6Bit aufgeteilt, das 7.bit wird dann aufgefüllt)

    aufgefüllt mit 1 oder 0?
    is ja einfach... ich frag mich warum die amis seitenweise zeug darüber schreiben das keiner versteht *g*

    Schön, wenn das so einfach wäre. Ein paar mehr Regeln gehören da schon zu. Das einfach im Forum zu erkläre, wäre ein bisschen zu kompliziert. Wenn du es ganau wissen willst, dann lies dir die entsprechende RFC durch. Ansonsten such mal bei Google...

    kingruedi schrieb:

    Wann was genommen wird ist eigentlich egal.

    Na ja, das stimmt eigentlich nicht ganz. Für Binär-Daten sollte man Base64 nehmen. Für Text, in dem 8-Bit-Zeichen vorkommen, sollte man Quoted-Printable nehmen. Genau nachzulesen in der entsprechenden RFC.

    Sovok schrieb:

    kingruedi schrieb:

    quoted-printable ist genau wie base64 eine Methode um 8Bit Zeichen auf 7Bit abzubilden.

    7BIT //jedes 8te bit is nutzlos/ascii?
    8BIT //1:1 senden/empfangen ?

    nein 7Bit ist die richtige Zeichengröße. 8Bit kann SMTP Server oder Mail Clients verwirren. Deswegen gibt es ja Base64 und Quoted-Printable um 8Bit auf 7Bit umzurechnen

    heisst dass ich bekomm als client sowieso nie 8bit daten rein? warum gibts das dann überhaupt als mime typ?

    unterscheidet sich Quoted-Printable irgendwie von base64?

    mit jedes 8te bit is nutzlos meinte ich, ob ich beim empfangen immer 7 bit abgreife , in ein byte stecke, die nächsten 7 bit hole usw. stimmt das ned?

    Binary sind 8-Bit-Daten. Ähnlich wie der Typ 8Bit. Beides ist nur aus Vollständigkeit vorhanden. Man sollte es nicht nutzen, da es Server geben könnte, die noch auf 7-Bit basieren. Das würde dann zu einem undefinierten Verhalten kommen.

    Bei Base64 werden alle Bits neu verteilt (so, wie es kingruedi beschrieb). Bei QuotedPrintable werden nur die Daten kodiert, die einen 8-Bit-Wert haben. Das sieht dann ungefähr so aus: M=E4nner bedeutet dann z. B. Männer. (e4 = hexcode vom ä).

    Du solltest du am besten folgene RFCs angucken, wenn du eMails erstellen willst:
    RFC 822 - Standard for the format of arpa internet text messages
    RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies
    RFC 1522 - MIME (Multipurpose Internet Mail Extensions) Part Two: Message Header Extensions for Non-ASCII Text

    Da ist selber grade daran abeite, schreibe ich mir das z. Z. in einem Tut zusammen. Wird aber noch ein bisschen dauern, bis das fertig sein wird.

    Konstantin



  • Na ja, das stimmt eigentlich nicht ganz. Für Binär-Daten sollte man Base64 nehmen. Für Text, in dem 8-Bit-Zeichen vorkommen, sollte man Quoted-Printable nehmen. Genau nachzulesen in der entsprechenden RFC.

    das merkt man spätestens wenn man ein Binäry mal mit Quoted-Printable kodiert 😉

    > du -h a.out
    16K   a.out
    > base64 -e a.out a.out.b64
    > qprint -e a.out a.out.qp
    > du -h a.out.b64
    20K   a.out
    > du -h a.out.qp
    32K   a.out
    


  • super danke jungs... damit kann ich erstmal ne weile experimentiern



  • noch mehr fragen

    -outlook verschickt nunmal 8bit und binary und da mein client auch outlook mails lesen können will wüsst ich gern wie ich mit den daten im vergleich zu 7bit umgehn soll

    -was mach ich bei base64 wenn sich die gesamtanzahl der bytes nich durch 3 teilen lässt

    -woher weiss ich beim decode von quoted-printable, welche zeichen encoded wurden und welche ned

    @konstantin auf das tut freu ich mich jetzt schon
    wenn du fertig bist schick mirs bitte als pdf an ez@rebels.com
    wenns keine pdf is mach ich gern die konvertierung



  • Sovok schrieb:

    -outlook verschickt nunmal 8bit und binary und da mein client auch outlook mails lesen können will wüsst ich gern wie ich mit den daten im vergleich zu 7bit umgehn soll

    Das müsste eigentlich egal sein. Zeig die Daten einfach so an, wie du sie bekommst.

    Sovok schrieb:

    -was mach ich bei base64 wenn sich die gesamtanzahl der bytes nich durch 3 teilen lässt

    -woher weiss ich beim decode von quoted-printable, welche zeichen encoded wurden und welche ned

    Wie schon geschrieben, kann man das der RFC entnehmen. Da gibt es zu beiden ein paar Rules. Wenn du in englisch nicht so fit bist, kann ich dir das ja mal kurz zusammmenfassen. Da komm ich aber erst am Freitag zu. Morgen hab ich keine Zeit und heute Abend habe ich da keine Lust mehr zu. 😉

    Sovok schrieb:

    @konstantin auf das tut freu ich mich jetzt schon
    wenn du fertig bist schick mirs bitte als pdf an ez@rebels.com
    wenns keine pdf is mach ich gern die konvertierung

    Da ist eigentlich in HTML geplant, um das auf meiner Website zu veröffentlichen. Aber wenn ich fertig bin, können wir da mal drüber reden... 🙂



  • 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