df8oe: php-Mail mit eingebettetem Bild

Ich versuche, mit meinem Apachen ein Formular mit eingebettetem Bild per Mail zu verschicken. Das geht auch prinzipiell - bis auf daß das Bild nicht angezeigt wird. Weder inline, noch als Anhang. Es ist einfach "versteckt". Im Quelltext der Mail kann ich es jedoch sehen. Es ist auch egal, mit welchm Mailreader ich arbeite - das Bild wird nicht angezeigt.... Was läuft falsch??

Hier der Quelltext der Mail:

Header:
 MIME-Version: 1.0
 From: blabla
 Reply-To: blubbblubb
 Content-Type: multipart/alternative; boundary=bordmark
 Content-Disposition: inline

Mailbody:
 --bordmark
 Content-Type: image/png; name="code.png"
 Content-Transfer-Encoding: base64
 Content-ID: <1234code4321>
 Content-Disposition: inline; filename="code.png"

iVBORw0KGgoAAAANSUhEUgAAAH0AAAA8AQMAAABxSievAAAABl BMVEUAAAD///+l2Z/dAAAAZUlE
 QVQokWP4jwp+MPy/UuruEnvx4kXxUtlC8VGBwSuAEXPUELi994zxnO+W2+ECzy33r8 3OunYeLnB4
 7/pMv9dX2hEq9k4vXZ+96zySGdv+vs6uQ5jxX+Lc5znfJKnr0lEB CgUAKk/49NHFmtcAAAAASUVO
 RK5CYII=

--bordmark
 Content-Type: text/plain;charset="iso-8859-15"
 Content-Transfer-Encoding: quoted-printable

Hier steht der Plaintext...

--bordmark
 Content-Type: text/html;charset="iso-8859-15"
 Content-Transfer-Encoding: quoted-printable

<html>
 <body>
 <div align="center"><b><h1>Auftrag Nr. 1167993029</h1><img src="cid:1234code4321" align="right"><br>
 ================================================== =====================</div><br><br>

...hier folgen diverse HTML-Zeilen...

</body></html>

--bordmark

Jeder Tipp ist willkommen!

df8oe

  1. Hallo Andreas,

    Ich versuche, mit meinem Apachen ein Formular mit eingebettetem Bild per Mail zu verschicken. Das geht auch prinzipiell - bis auf daß das Bild nicht angezeigt wird. Weder inline, noch als Anhang. Es ist einfach "versteckt".

    Content-Type: multipart/alternative; boundary=bordmark

    hier dürfte der Hund begraben sein: Du gibst multipart/alternative an, also soll sich der Client aus den einzelnen Teilen denjenigen heraussuchen, der ihm am besten passt. Also entscheidet er sich für den HTML-Teil und ignoriert den/die andere/n.

    Was du meintest, war sicher multipart/mixed.

    73, do4fun/Martin

    --
    Wer im Glashaus sitzt, sollte Spaß am Fensterputzen haben.
    1. Wenn ich hier "mixed" reinschreibe, wird der Plaintext-Teil auch mit angezeigt, und das Bild nicht eingebettet, sondern am Schluß der Mail. Was ich will, ist das:

      • wenn der Mailreader so eingestellt ist, daß er kein HTML anzeigen soll, soll der Plaintext angezeigt werden

      -- wenn der Mailreader so eingestellt ist, daß er HTML anzeigen kann, soll er den HTML-Teil anzeigen, und zwar mit dem angehängten Bild AN DER RICHTIGEN STELLE (nicht als anklickbarer Anhang)

      Gibt es dafür auch eine Lösung??

      Danke
      Andreas

      1. Hallo,

        Wenn ich hier "mixed" reinschreibe, wird der Plaintext-Teil auch mit angezeigt, und das Bild nicht eingebettet, sondern am Schluß der Mail. Was ich will, ist das:

        • wenn der Mailreader so eingestellt ist, daß er kein HTML anzeigen soll, soll der Plaintext angezeigt werden
          -- wenn der Mailreader so eingestellt ist, daß er HTML anzeigen kann, soll er den HTML-Teil anzeigen, und zwar mit dem angehängten Bild AN DER RICHTIGEN STELLE (nicht als anklickbarer Anhang)

        ah, jetzt sehe ich's. Dann brauchst du eine doppelte Verschachtelung. Dann ist der globale Content-Type multipart/alternative schon in Ordnung, aber die einzelnen Parts müssen ihrerseits auch wieder multipart sein.
        Vereinfacht dargestellt:

        MIME-Version: 1.0
        From: ...
        Reply-To: ...
        Content-Type: multipart/alternative; boundary=bordmark

        --bordmark
        Content-Type: multipart/mixed; boundary=bordmark2

        --bordmark2
        Content-Type: image/png
         ...

        --bordmark2
        Content-Type: text/html
         ...

        --bordmark
        Content-Type: text/plain
         ...

        --bordmark

        Also: Haupt-Header der Mail als multipart/alternative. Ein Teil davon ist dann text/plain, der andere wiederum multipart/mixed und enthält seinerseits den HTML-Teil und das Bild.

        So long,
         Martin

        --
        Wer schläft, sündigt nicht.
        Wer vorher sündigt, schläft besser.
        1. Das hört sich SEHR GUT an. Ich werde es heute Abend mal austesten und mache dann hier eine Rückmeldung.

          Danke für Deine Hilfe!

          cu
          Andreas

        2. Hellihello Martin und Andreas,

          eurer Anleitung gemäß habe ich mal versucht, das nachzubauen und schließlich über Thunderbird im als ".eml" reingeladen. Klappte zumindest Ansatzweise. Offenbar mag er Leerzeichen an gewissen Stellen nicht besonders.

          Meine Frage aber eher: wie bekommt mensch denn den Apache dazu, ein solches Mail zu versenden? Bzw. allgemeiner, in welchen Zusammenhängen macht es Sinn, sich das komplett selbst zusammenzubasteln. Mir ist bisher nur die Mailfunktion von PHP (-pear) untergekommen...;

          Dank und Gruß,

          frankx

          1. Hallo frankx,

            eurer Anleitung gemäß habe ich mal versucht, das nachzubauen und schließlich über Thunderbird im als ".eml" reingeladen. Klappte zumindest Ansatzweise. Offenbar mag er Leerzeichen an gewissen Stellen nicht besonders.

            das könnte natürlich sein. Die würde ich dann sicherheitshalber codieren - je nach Kontext als =20 (Quoted-Printable) oder %20 (URL-Codierung).

            Meine Frage aber eher: wie bekommt mensch denn den Apache dazu, ein solches Mail zu versenden?

            Gar nicht. Apache ist ein Webserver, der verschickt keine Mails (okay, ausgenommen vielleicht Warnmails an den Server-Admin, wenn er entsprechend konfiguriert ist).

            Ansonsten baut man den Mail-Body einfach als entsprechend langen Text zusammen und übergibt ihn, mit den nötigen globalen Headerzeilen garniert, an die PHP-Funktion mail().

            Bzw. allgemeiner, in welchen Zusammenhängen macht es Sinn, sich das komplett selbst zusammenzubasteln.

            Meiner Ansicht nach in allen Fällen, wo man nichts Bequemeres an der Hand hat. Und mal etwas über den Aufbau von MIME-Mails zu recherchieren und so ein Monster dann zusammenzustoppeln, ist ja auch kein so großer Aufwand. Das meine ich jetzt aus der Sicht eines Webprogrammierers, der die Basics sowieso kennen sollte. Einem Neueinsteiger möchte ich das freilich nicht zumuten.

            Schönen Abend noch,
             Martin

            --
            Wenn du beim Kochen etwas heißes Wasser übrig hast, friere es ein.
            Heißes Wasser kann man immer gebrauchen.
            1. Hellihello Martin,

              Ansonsten baut man den Mail-Body einfach als entsprechend langen Text zusammen und übergibt ihn, mit den nötigen globalen Headerzeilen garniert, an die PHP-Funktion mail().

              genau die Mailfunktion bietet doch aber als Paramenter to, subject und content an sowie additional headers. wie bring ich diese mailfunktion meine Mail mit header und body bei?

              Dank,

              frankx

              1. Hallo,

                Ansonsten baut man den Mail-Body einfach als entsprechend langen Text zusammen und übergibt ihn, mit den nötigen globalen Headerzeilen garniert, an die PHP-Funktion mail().

                genau die Mailfunktion bietet doch aber als Paramenter to, subject und content an sowie additional headers.

                eben, da haben wir doch alles. *nixversteh*

                wie bring ich diese mailfunktion meine Mail mit header und body bei?

                Den Empfänger als ersten Parameter, die Betreffzeile als zweiten, den zusammengebauten Mail-Body als dritten und die globalen Headerzeilen als vierten Parameter. Oder was ist daran so unverständlich?

                So long,
                 Martin

                --
                Wer im Glashaus sitzt, sollte sich nur im Dunkeln ausziehen.
                1. Hellihello Martin,

                  Den Empfänger als ersten Parameter, die Betreffzeile als zweiten, den zusammengebauten Mail-Body als dritten und die globalen Headerzeilen als vierten Parameter. Oder was ist daran so unverständlich?

                  is wohl Freitag heute, wenn Dus so sagst, dann scheint alles klar. War die Verwirrung vielleicht, dass im Thread die ganze Mail komplett dargestellt war. Ich hatte jetzt irgendwie gedacht, dass da im Grunde alles (also auch Subject und Empfänger) drin verklausuliert werden könnte im Header und dass die Mail als ganzes so dann "rausgehauen" würde, weil er vom Apache sprach. Ich hatte den Titel da nicht im Auge...;

                  Dank

                  frankx