Mail mit HTML und Bildern mit php

desmo

Grünschnabel
Ich möchte mails mit HTML-Text und Bildern versicken.
Zu diesem Thema gibt es diverse Tutorials.

Wenn ich es versuche, ist das Resultat ernüchternd.

Der Syntax des empfangenen Mail sieht zwar sehr ähnlich aus, wie der, den andere Programme erzeugen (bei denen man die Bilder sieht), aber...

Bei mir sieht man die Bilder gar nicht, bzw. wenn ich ein Bitmap nehme in tragischer Qualität.

Ich weiss nicht, wo das Problem liegt.

Weiss jemand Rat oder hat das Problem auch gehabt und jetzt gelöst?

Hier der Code, den ich zum Testen verwende:
Ich habe ihn aus dem Netz und nur geringfügig angepasst.

function test() {
$picture = "C:/test/logo.jpg";
$pictureName= "logo.jpg";
$dateienname=array($pictureName);
$grenze="grenzlinie";
$datei =array($picture);
$headers ="MIME-Version: 1.0\r\n";
$headers.="From: t.adank@bluemail.ch\n";
$headers.="Content-Type: multipart/related;\n\tboundary=$grenze\n";
$headers.="Content-Disposition:inline\n";
$botschaft="\n--$grenze\n";

$botschaft.="Content-Type: text/html;charset=iso-8859-1\n";
$botschaft.="Content-Transfer-Encoding: 8bit\n\n";

$botschaft.= "<html><head><title>Test</title></head><body>";
$botschaft.="<font color=red size=5>Dies ist ein Test!</font><br>";
$botschaft.="Hier ist das Bild <br><table><tr>";
for($i=0;$i<count($datei);$i++)
{
$botschaft.="<td width=150 align=middle bcgolor=yellow>
<img src=cid:bild_$i border=1 width=120></td>";
}
$botschaft.="</tr></table><br>Dies ist ein Test um HTML Docus mit Bildern zu versenden";
$botschaft.="</body></html> \n";

for ($i=0;$i<count($datei);$i++)
{
$botschaft.="\n--$grenze\n";
$botschaft.="Content-Type: application/octet-stream;\n\tname=".$dateienname[$i]."\n";
$botschaft.="Content-Transfer-Encoding: base64\n";
$botschaft.="Content-ID: <bild_$i>\n";

$botschaft.="Content-Disposition:inline;filename=".$dateienname[$i]."\n\n";
$zeiger_auf_datei=fopen($datei[$i],"rb");
$inhalt_der_datei=fread($zeiger_auf_datei,filesize($datei[$i]));
fclose($zeiger_auf_datei);
$inhalt_der_datei=chunk_split(base64_encode($inhalt_der_datei));
$botschaft.=$inhalt_der_datei;
}
$botschaft.="--$grenze\n";
mail("desmo@bluemail.ch","HTML Seite mit Bildern",$botschaft,$headers);
print "email wurde versandt";
}



;-)
 
Hallo desmo,

Aus dem Code-gewurschtel wer ich nich ganz schlau aber zu HTML-Emails kann ich folgendes sagen:

Die Email ist aufgeteilt in verschiedene Parts

Header
Content
Subcontent
Attachments

Nach dem Header muss jeder Part durch ein "boundary" getrennt werden. Ausserdem braucht jeder Part seinen Content-Type z.B.

Text/HTML oder application/octet-stream....

Es ist wichtig das das genau eingehalten wird und immer eine Zeile Abstand zwischen Boundary, content.type und dem tatsächlichen content gewährt wird.


Ein kleiner Tipp: Wenn Du irgendwie die Möglichkeit hast dir auf einem Linux-System die Maildateinen in /var/mail anzuschauen dann tu das denn es ist sehr lehrreich.

Ich hoffe ich konnte Dir ein kleines bischen weiter helfen

Gruss Danilo
 
Danke für den Tip

Dein Tipp mit den Abständen könnte hilfreich sein.

Mir ist bei all der Ausprobiererei aufgefallen, dass schon kleinste Änderungen
(mehr Abstände oder so) im Code irgendwelche komischen Folgen haben.
Ich vermute, dass die Lösung nicht allzuweit entfernt ist.

Ich habe Linux und werde da mal nachsehen.

Im Netz findet man zu dem Thema viel, aber irgendwie fehlt mir eine konkrete Beschreibung, wo wieviele Abstände rein müssen, wo Zeilenumbrüche stehen müssen etc. Bezüglich dem Aufbau des Mails ist es mir soweit klar.

Was ich machen werde: Ich habe einen Massenmailer, der es richtig macht.
Ich werde das gleiche Mail mit php senden und dann die Mails Zeile für Zeile vergleichen.

Was mir noch aufgefallen ist. Mein Massenmailer wandelt das richtige HTML-Docu um und setzt an verscheidenen Stellen den Code "3D" ein. Was soll das ?

Weisst du was?

Danke und Gruss
Thomas
 
Zurück