Zum Inhalt springen

Schandfleck

Mitglieder
  • Gesamte Inhalte

    34
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Schandfleck

  1. Die Zeichen entstehen, wenn der Browser das Byte Order Mark (BOM) von Unicode in UTF-8-Kodierung als ISO 8859-1 (Latin 1) anzeigt. Das BOM am Anfang einer Textdatei dient in den Kodierungen UTF-16 und UTF-32 als Kennzeichnung der Bytefolge, little oder big endian. Bei UTF-8 ist es nicht nötig, wird aber gerne eingesetzt, um den Text als UTF-8-kodiert zu kennzeichnen. Wahrscheinlich hast Du keine, oder eine falsche Zeichensatzdeklaration im HTTP-Header oder im HTML-Quelltext, so daß manche Browser fälschlicherweise den Zeichensatz ISO 8859-1 annehmen. Das BOM ist im Web-Umfeld generell problematisch und sollte nicht verwendet werden. Speichere die Datei entweder als UTF-8 ohne BOM, oder als ISO 8859-1 (ISO Latin 1). Achte in jedem Fall darauf, daß die Zeichenkodierung richtig im HTTP-Header (Content-Type: text/html; charset=iso-8859-1) und/oder im HTML-Dokoment (<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">) angegeben ist. Ausführliche Erläuterungen zu Zeichensätzen und -kodierungen in HTML findest Du in: W3C I18N Tutorial: Character sets & encodings in XHTML, HTML and CSS
  2. Schaue Dir mal dies hier an. Wenn es keine HTML-Mail seien soll, kann einiges entfallen.
  3. Dein Hauptptoblem war, daß die Content-ID nicht richtig in der E-Mail erschien. Du solltest nicht die ganze E-Mail im Header verstauen. Reine HTML-Emails sind schlechter Stiel; es sollte auch eine Textversion vorhanden seien. Beachte, daß nicht jedes E-Mail-Backend mit 8bit oder binären Daten umgehen kann. Um es sauber zu machen, müßten die Text-Teile noch als quoted-printable konvertiert werden. Da PHP dafür leider keine fertige Funktion mitliefert, war mir das zu aufwendig. Im HTML-Teil konvertiert die Funktion htmlentities() die meisten 8bit-Zeichen (nicht alle!). Wenn Du ein Unix-System mit 8bit-sicherem Mail-Backend hat, ist in der Regel die Angabe eines zusätzlichen Parameters nötig, z.B. mail($to, $subject, $message, $headers, '-B'). »man sendmail« sollte Dir die nötige Information liefern. Bei Verständnisfragen, melde Dich nochmal. Ciao, Schadfleck <?php define('EOL', "\n"); // Linux: "\n", Windows: "\r\n" $from = 'test@test.de'; $to = 'email@email.de'; $betreff = 'Testnachricht'; $dateiname = 'bild.jpg'; // keine Umlaute und Sonderzeichen! $bildbeschreibung = 'tolles Bild'; // kurzer einzeiliger Text $text = 'Sie haben folgende Nachricht erhalten:' . EOL; $text .= EOL; $text .= 'weiterer Text' . EOL; $text .= 'weiterer Text' . EOL; $text .= EOL; $text .= 'Datum/Zeit: ' . date("d.m.Y H:i:s") . EOL; $subject = '=?iso-8859-1?B?' . base64_encode($betreff) . '?='; // nötig, falls Umlaute im Betreff $cid = uniqid('att', TRUE) . '*' . $from; $boundary = uniqid('=_', TRUE); $bild = file_get_contents($dateiname); if ($bild === FALSE) die('konnte Bild ' . $dateiname . ' nicht lesen'); $headers = 'From: ' . $from . EOL; $headers .= 'X-Mailer: PHP/' . phpversion() . EOL; $headers .= 'MIME-Version: 1.0' . EOL; $headers .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '-1"'; // letzte Zeile braucht kein EOL $message = '--' . $boundary . '-1' . EOL; $message .= 'Content-Type: text/plain; charset=iso-8859-1' . EOL; $message .= 'Content-Transfer-Encoding: 8bit' . EOL; $message .= EOL; $message .= $text; $message .= $bildbeschreibung . EOL; $message .= EOL . '--' . $boundary . '-1'. EOL; $message .= 'Content-Type: multipart/related; type="text/html"; boundary="' . $boundary . '-2"' . EOL; $message .= EOL; $message .= '--' . $boundary . '-2' . EOL; $message .= 'Content-Type: text/html; charset=iso-8859-1' . EOL; $message .= 'Content-Transfer-Encoding: 8bit'. EOL; $message .= EOL; $message .= '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"' . EOL; $message .= ' "http://www.w3.org/TR/html4/strict.dtd">' . EOL; $message .= '<HTML>' . EOL; $message .= '<HEAD>' . EOL; $message .= ' <TITLE>' . htmlentities($betreff) . '</TITLE>' . EOL; $message .= '</HEAD>' . EOL; $message .= '<BODY>' . EOL; $message .= ' <P>' . EOL; $message .= strtr(htmlentities($text), array("\r\n" => '<BR>' . EOL, "\n" => '<BR>' . EOL)); $message .= ' </P>' . EOL; $message .= ' <P>' . EOL; $message .= ' Bild:' . EOL; $message .= ' <IMG src="cid:' . $cid . '" alt="' . htmlentities($bildbeschreibung) . '">' . EOL; $message .= ' </P>' . EOL; $message .= '</BODY>' . EOL; $message .= '</HTML>' . EOL; $message .= EOL . '--' . $boundary . '-2' . EOL; $message .= 'Content-Type: image/jpeg; name="' . $dateiname . '"' . EOL; $message .= 'Content-ID: <' . $cid . '>' . EOL; $message .= 'Content-Transfer-Encoding: base64' . EOL; $message .= EOL; $message .= chunk_split(base64_encode($bild), 76, EOL); $message .= EOL . '--' . $boundary . '-2--'; $message .= EOL . '--' . $boundary . '-1--'; if (!mail($to, $subject, $message, $headers)) die('Fehler beim E-Mail-Versand!'); ?> [/php]

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...