HTML-Mail mit eingebundenem Bild per PHP versenden

LOK

Mitglied
Hallo,

ich hoffe hier kann mir jemand weiterhelfen... ich habe schon verschiedenste Tutorials im Netz ausprobiert und auch verschiedene Klassen jedoch komme ich nicht voran...
Ich versuche eine multipart/related HTML-Mail mit eingebettetem Bild zu versenden... jedoch zeigt mir bspw. Outlook immer nur den Text an (also auch das Bild als Zeichen und alle Grenzen) sprich er interpretiert den Header nicht ... hat jemand ne Anhnung was ich falsch mache?


PHP:
<?

$grenze="b0831418c517c569ede80585619636281";


$headers ="MIME-Version: 1.0\r\n";
$headers.="From: **********\n"; // *** natuerlich durch die Mail-Adresse ersetzt
$headers.="MIME-Version: 1.0\n";
$headers.='Content-Type: multipart/related; boundary = "'.$grenze;


$botschaft="\nThis is a MIME encoded message.\n";
$botschaft.="\n--".$grenze."\n";

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

$botschaft.= "<html><head><title>Test</title></head><body>\n";
$botschaft.="<font color=red size=5>Guten Tag $Vorname $Nachname !</font><br>\n";
$botschaft.="Hier nochmal Ihre Bilder <br><table><tr>\n";


$botschaft.='<td width=150 align=middle bcgolor=yellow>
<img src="cid:bild@news" width="120"></td>\n';


$botschaft.="</tr></table><br>$Beruf ist ein schöner Beruf.
Wir werden uns in Kürze unter der genannten Rufnummer $Telefon
mit Ihnen in Verbindung setzen.";
$botschaft.="</body></html> \n";

$botschaft.="\n--".$grenze."\n";

$botschaft.='Content-Type: image/jpeg; name="test.jpg"';
$botschaft.="\nContent-Transfer-Encoding: base64\n";
$botschaft.="Content-ID: <bild@news>\n";

$zeiger_auf_datei=fopen("./test.jpg","rb");
$inhalt_der_datei=fread($zeiger_auf_datei,filesize("./test.jpg"));
fclose($zeiger_auf_datei);
$inhalt_der_datei=chunk_split(base64_encode($inhalt_der_datei));
$botschaft.=$inhalt_der_datei;


$botschaft.="\n\n--$grenze--";


mail("************","Schoene HTML Seite mit Bildern drin",$botschaft,$headers); // *** natuerlich durch die Mail-Adresse ersetzt
print "email wurde versandt";
?>

vielen Dank im voraus

LOK
 
Zuletzt bearbeitet:
Mir fällt auf, dass das abschließende Anführungszeichen bei der Angabe der Grenze fehlt (die in diesem Fall auch gar nicht nötig sind). Ich weiß momentan auch nicht, ob dort überhaupt Leerzeichen zwischen Parameterbezeichner, dem Gleichheitszeichen und dem Parameterwert erlaubt sind.
 
nach dem einen Tut, das du hier verlinkt hast habe ich es schon gemacht und es ging nicht... aber das andere war gold wert.... thx

fuer alle die sowas auch noch suchen hier jetzt ein funktionierender Quelltext:

PHP:
<?php
  
  $ImageLocation ="./test.gif";
  $ImgName = "test.gif";
  $MailFrom="bla";
  $MailFromAdr="mail@yourdomain.de";
  $MailTo ="addy@domain.de";
  $MailToSubject = "Test-Mail mit Bild";

  $CID = md5(uniqid (rand(), 1));

  $mime_boundary = "" . md5(uniqid(mt_rand(), 1));  


  $Header= "From:$MailFrom<$MailFromAdr>\n";
  $Header.= "X-Mailer: PHP/" . phpversion(). "\n";  
  $Header.= "MIME-Version: 1.0\n";
  $Header.= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"; type=\"text/plain\"\n"; 

  $MailBody = "--".$mime_boundary."\n";
  $MailBody.= "Content-Type: Text/HTML; charset=iso-8859-1$EOL";  
  $MailBody.= "Content-Transfer-Encoding: quoted-printable\n\n";  
  $MailBody.="<a href='http://lok-soft.de'>testlink</a><br><img src='cid:$CID.$ImgName'>";
  $MailBody.= "\n\n";
  $MailBody.= "--".$mime_boundary."\n";  


  $fp = fopen ($ImageLocation, "rb");
  $str = fread ($fp, filesize ($ImageLocation));
  $data = chunk_split(base64_encode($str));
  $content.= "Content-Type: image/gif\n";
  $content.= "Content-ID: <$CID.$ImgName>\n";
  $content.= "Content-Transfer-Encoding: base64\n";
  $content.= "Content-Disposition: inline; filename=\"$ImgName\"\n\n";  


  $content.= $data;
  $MailBody.= $content;
  $MailBody.= "--".$mime_boundary."--\n";  

   mail($MailTo, $MailToSubject, $MailBody, $Header);

EDIT:
achso .. je nach server muss \n durch \r\n ersetzt werden (sinnvoll das ganze vielleicht per Variable zu machen)

Lg
LOK
 
Die Spezifikation schreibt vor, dass Zeilen durch die Zeichensequenz \r\n voneinander getrennt werden. Nur manche E-Mail-Server sind so tolerant und ersetzen die falschen \n eigentständig durch die richtige Zeichensequenz. Daher ist es sinnvoller gleich die richtige Zeichensequenz zu benutzen.
 
hi,

ich habe die \n bei mir im script durch eine variable ersetzt... wenn diese variable mit \n gefuellt ist, laeuft alles bestens... bei \r\n geht es nicht... von daher muss ich dir leider wiedersprechen, dass es immer \r\n sein muss...

lg
LOK
 
Hi,

das kann ich bestätigen mit \r\n sobald ich so eine Mail verschicke wird der Code nicht richtig dargestellt.

Ich hätte allerdings noch eine andere Frage: In Thunderbird oder Eudora wird das Bild als rote Kreuz oder als roter Punkt dargestellt, obowhl es richtig angehängt ist. In Outlook 2003 wird die grafik normal angezeigt wie es soll.

Sind das Sicherheitseinstellungen in den jeweiligen Mailclients? Erstaunlicher weise wird die Grafik korrekt angezeigt wenn ich die an Outlook korrekt angezeigte Mail an Thunderbird weiterleite. Dann wird sie ach dort korrekt angezeigt *wunder*

Wäre super wenn da noch jemand was zu sagen könnte woran das liegt, da ich langsam nicht mehr weiß, was für Einstellungen ich am Thunderbird machen muss. D.h. mir schant hier ein ganz anderes Problem zu sein :(

Gruß,
Lars
 
Hi,

das bringt mich leider nicht weiter, da ich dies als Test für unsere Entwicklung machen will. Da ich mich mit PHP etwas auskenne, versuche ich die Mail darüber zu verschicken. Die Entwicklung muss dann später in C++ dieses per Hand zusammenstellen und aufbauen, so das aus unserer Windowsanwendung HTML Mails mit Bild und Anhang versendet werden kann.

D.h. es geht im Grunde wie muss eine Mail wirklich aufgebaut sein damit das tut und umdas eignetlich Versenden. Werd mir das Paket aber trotzdem mal anschauen, da ich evtl. da paar Infos rausziehen kann.
 

Neue Beiträge

Zurück