php-Mail mit eingebettetem Bild
df8oe
- php
0 Der Martin
0 df8oe0 Der Martin
0 df8oe0 frankx0 Der Martin
0 frankx0 Der Martin
0 frankx
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
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
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 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
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
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
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
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
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
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
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