Rolf Bensch: PHP: HTML-Email mit Anhang

Hallo NG,

ich möchte per PHP eine HTML-Email mit Anhang (Logo) versenden und das Logo als Inhalt der HTML-Mail verwenden. Nach meinen Recherchen sollte nachfolgender Code alle Bedingungen für eine "multipart/mixed"-Email erfüllen, beim Empfänger wird die Nachricht allerdings nur als Plain-Text angezeigt und sie erhält keinen Anhang.

Was habe ich vergessen?

  
<?php  
$html = "<html>\n"  
       ."  <head>\n"  
       ."    <title>Tesmail</title>"  
       ."    <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>\n"  
       ."    <style type='text/css'>\n"  
       ."      h1    { color:red}\n"  
       ."      #logo { width:150px; position:absolute; right:20px; top:20px}\n"  
       ."    </style>\n"  
       ."  </head>\n"  
       ."  <body>\n"  
       ."    <h1>Testüberschrift</h1>\n"  
       ."    <p>Absatz mit Text</p>\n"  
       ."    <img id='logo' src='Logo_LH_black.jpg' alt='Logo'>\n"  
       ."  </body>\n"  
       ."</html>\n";  
  
  $Vorname="Hans";  
  $Nachname="Mustermann";  
  $Domain="irgendwo.org";  
			  
  $Empfaenger ="$Vorname.$Nachname@$Domain";  
  
  $Betreff ="Test: HTML-Email versenden mit Anhang";  
	  
  $AnhangPfad=$_SERVER['DOCUMENT_ROOT']."/Grafiken/Logo_LH_black.jpg";  
  $AnhangName="Logo.jpg";  
  $AnhangInhalt = file_get_contents($AnhangPfad);  
	  
  $trenner= md5(uniqid(time()));  
  
  $headers = "From: $Vorname $Nachname <$Vorname.$Nachname@$Domain>\n"  
     . "MIME-Version: 1.0\n"  
     . "Content-Type: multipart/mixed;\n boundary = $$trenner\n\n"  
     . "Content-Transfer-Encoding: 8bit\n\n";  
  $mailtext = "This is a multi-part message in MIME format\n"  
     .	"--$trenner\n"  
     . "Content-Type: text/html; charset=UTF-8\n"  
     . "Content-Transfer-Encoding: quoted-printable\n"  
     . $html."\n\n"  
     . "--$trenner\n"  
     . "Content-Type: image/jpeg; charset=UTF-8; name='Logo_LH_black.jpg'\n"  
     . "Content-Transfer-Encoding: base64\n"  
     . "Content-Disposition: attachment; filename='Logo_LH_black.jpg'\n"  
     . chunk_split(base64_encode($AnhangInhalt))  
     . "\n"  
     . "--$trenner--";  
	  
  if (@mail($Empfaenger, $Betreff,  $mailtext, $headers)) {  
    echo "Die Mitteilung wurde erfolgreich per Email versendet.<br><br>";  
    echo $html;  
  } else {  
    echo "<p style=color:red;>FEHLER: Pressemitteilung konnte <b>nicht</b> per Email versendet werden.</p>";  
  }  
?>  
  

  1. Hello,

    $headers = "From: $Vorname $Nachname <$Vorname.$Nachname@$Domain>\n"

    ^
    Bitte mache Dir die Mühe, und durchsuche das hiesige Archiv nach dem Thema.
    Suchbegriffe in der

    category:PHP "Mail" "MIME"

    usw.

    Auf welchem System läuft PHP und auf welchem der bentutzte SMTP-Server?

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo Tom,

      Bitte mache Dir die Mühe, und durchsuche das hiesige Archiv nach dem Thema.
      Suchbegriffe in der

      category:PHP "Mail" "MIME"

      usw.

      Auf welchem System läuft PHP und auf welchem der bentutzte SMTP-Server?

      ...

      Danke für den Hinweis. Einige Stunden später fand ich aber hiermit keine Lösung. Mit Einsetzen eines zusätzlichen "\n" erhielt ich auf Empfängerseite irgendwann eine HMTL-Mail mit einem Anhang, dieser wur aber immer, auch wenn filename="..." gestezt war, mit "ATT?????.txt" benannt. Bei der Recherche dieses Problems fand ich eine Routine, die ein Kollege zur freien Nutzung angeboten hatte: http://www.tutorials.de/php/142180-prob-mit-mail-mit-attachment-att-txt-dateien.html. Diese habe ich nun erfolgreich im Einsatz.

      Grüße

      Rolf

  2. Hallo Tom!

    Stell einfach das Logo auf einen Server und binde es im E-Mail-Text durch <img src="Pfad" /> ein.

    mfg Daniel

    1. sry, "Hallo Rolf" wollt ich schreiben :-)

    2. Hallo Daniel,

      Stell einfach das Logo auf einen Server und binde es im E-Mail-Text durch <img src="Pfad" /> ein.

      Hmmm, das ist nur auf Umwegen möglich da Empfänger z.T. innerhalb eines Intranets sitzen (ohne Internetzugang) und andereseits außerhalb (ohne Zugang zum Intranet. Ich müsste zwei Grafiken einlinken, die auf verschiedenen URLs verweisen. Da eine Grafik nicht dargestellt wird, kommt es zu Darstellungsfehlern (Rahmen um fehlende Grafik, Alt-Text....). Zwischenzeitlich habe ich eine funktionierende Lösung gefunden (siehe weiter unten im Thread).

      Danke für Deinen Tipp

      Rolf