Chris: Multipart-Mails

Guten Abend,

ich benötige mal ein paar handfeste Tipps zum Thema Multipart-Mails mit php. Wie es so im Groben funktioniert, habe ich die letzen Tage schon rechercherit und ausprobiert. Nun möchte ich das Ganze in ein paar leicht handhabbare Funktionen gießen.

Da bleibt für mich die Frage, ob man base64-Codierung generell nutzen kann für die Typen, die nicht plain-Text sind. Oder gibt es unter den eMail-Clients viele, die das nicht zurückübersetzen können? Verursacht base64 evtl. mehr Traffic, als für Multipart-Mails nötig wäre?

Besonders interessant ist für uns der Typ
Content-Type: multipart/related;
  type="multipart/alternative";

da wir so am besten Fragebogen mit Bildern als eMail versenden können.
(Das ist die Aufgabenstellung)

Ich muss mich nun für die Codierung, also Content-Transfer-Encoding entscheiden. Welche Möglichkeiten hätte ich denn mit php4 sonst noch außer base64? Für quoted-printable habe ich keine Codierungsfunktion gefunden.

Würde mich freuen, ein paar Anregungen zu bekommen von Leuten, die das auch schon mal gemacht haben.

Liebe Grüße

Chris

  1. Holladiewaldfee,

    Da bleibt für mich die Frage, ob man base64-Codierung generell nutzen kann für die Typen, die nicht plain-Text sind. Oder gibt es unter den eMail-Clients viele, die das nicht zurückübersetzen können? Verursacht base64 evtl. mehr Traffic, als für Multipart-Mails nötig wäre?

    Ich verwende fast immer base64, ausser für Plaintext und HTML, da verwende ich meistens quoted-printable

    Ich muss mich nun für die Codierung, also Content-Transfer-Encoding entscheiden. Welche Möglichkeiten hätte ich denn mit php4 sonst noch außer base64? Für quoted-printable habe ich keine Codierungsfunktion gefunden.

    7Bit und 8Bit sind glaube ich noch ok. Wobei ich bei letzterem aber meine Zweifel habe ...

    Quoted-Printable String Codieren

    function quotedprintable_encode($input, $line_max = 76)
    { # Credits To: pob@medienrecht.org
     $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
     $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
     $eol = "\r\n";
     $escape = "=";
     $output = "";

    while( list(, $line) = each($lines) )
     {
      $line = rtrim($line); // remove trailing white space -> no =20\r\n necessary
      $linlen = strlen($line);
      $newline = "";
      for($i = 0; $i < $linlen; $i++)
      {
       $c = substr($line, $i, 1);
       $dec = ord($c);
       if(($dec == 32)&&($i == ($linlen - 1)))
       { // convert spaceat eol only
        $c = "=20"; }
       elseif(($dec == 61)||($dec < 32 )||($dec > 126))
       { //always encode "\t", which is *not* required
        $h2 = floor($dec/16); $h1 = floor($dec%16);
        $c = $escape.$hex["$h2"].$hex["$h1"]; }

    if((strlen($newline)+strlen($c))>=$line_max)
       { // CRLF is not counted
        $output .= $newline.$escape.$eol; // soft line break; "=\r\n" is okay
        $newline = ""; }
       $newline .= $c;
      }
      $output .= $newline.$eol;
     }
     return trim($output);
    }

    Würde mich freuen, ein paar Anregungen zu bekommen von Leuten, die das auch schon mal gemacht haben.

    Jep ... zu genüge, um nicht zu sagen: Bis zum Umfallen ;-)

    Ciao,

    Harry

    --
      Man weiß erst was man hatte, wenn man es verloren hat.
      Intelligenz ist nicht zwingend etwas positives.
    1. Danke Harry,

      bleibt nur noch die Frage, ob etwas dagegen spricht, immer base64 zhu benutzen, mit Ausnahme von plain-text in US-Ascii natürlich.

      Grüße

      Chris

      1. Holladiewaldfee,

        bleibt nur noch die Frage, ob etwas dagegen spricht, immer base64 zhu benutzen, mit Ausnahme von plain-text in US-Ascii natürlich.

        Die Größe des entstehenden Anhangs?
        Die Frage ist natürlich: Wie groß ist der Anhang bei anderen Codierungsverfahren?

        Ciao,

        Harry

        --
          Man weiß erst was man hatte, wenn man es verloren hat.
          Intelligenz ist nicht zwingend etwas positives.