tag:forum.selfhtml.org,2005:/self eMail senden mit mail(), Codierungsprobleme – SELFHTML-Forum 2014-03-20T10:54:30Z https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604300#m1604300 Tom bitworks@web.de http://selfhtml.bitworks.de 2014-03-04T13:55:50Z 2014-03-04T13:55:50Z eMail senden mit mail(), Codierungsprobleme <p>Hello,</p> <p>lang ist's her, dass ich selber was dazu verfasst habe und es hat damals zuverlässig funktioniert. Leider ist mein Mail-Modul verschollen. In meinen 1000 Postings hier zum Thema habe ich die Gedanken auch noch nicht alle wiederfinden können.</p> <p>Jedenfalls habe ich mich jetzt im Dschungel von Zeichencodierung, Transfer-Encoding, Header-Zeilen, was macht der Mailclient "einfach so?" usw. verlaufen.</p> <p>Stand der Tests ist:</p> <pre><code class="block language-php"> <span class="token php language-php"><span class="token delimiter important"><?php</span> mailtest<span class="token operator">.</span>php <span class="token comment">### Versand von Mail mit Attachment ### utf-8 ### ÄÖÜäöü </span> <span class="token variable">$filename</span> <span class="token operator">=</span> <span class="token constant">__FILE__</span><span class="token punctuation">;</span> <span class="token variable">$content</span> <span class="token operator">=</span> <span class="token function">chunk_split</span><span class="token punctuation">(</span><span class="token function">base64_encode</span><span class="token punctuation">(</span><span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token variable">$filename</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">76</span><span class="token punctuation">,</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">#$content = base64_encode(file_get_contents($filename), 76, PHP_EOL); </span> <span class="token variable">$mailto</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'tschmieder@online.de'</span><span class="token punctuation">;</span> <span class="token variable">$subject</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'Mail-Test (8) ASCII mit ÄÖÜäöü and boundary'</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'Hier kommt der öffentliche Text mit dämlichen Übelkeiten und Ödemen'</span><span class="token punctuation">;</span> <span class="token variable">$header</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"from: info@bikers-lodge.com\n"</span><span class="token punctuation">;</span> <span class="token variable">$time</span> <span class="token operator">=</span> <span class="token function">time</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$boundary</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"----=_TSMail-Next-Part-<span class="token interpolation"><span class="token variable">$time</span></span>"</span><span class="token punctuation">;</span> <span class="token variable">$header</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"Content-Type: multipart/mixed;\n"</span><span class="token punctuation">;</span> <span class="token variable">$header</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">" boundary=\"<span class="token interpolation"><span class="token variable">$boundary</span></span>\"\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"\n\n--<span class="token interpolation"><span class="token variable">$boundary</span></span>\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"Content-Type: text/plain;\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">" charset=iso-8859-1\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"Content-Transfer-Encoding: 8bit\n\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"Test-Mail mit Anhang, bitte den Quelltext der Mail kopieren und nachher mitbringen\n\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"\n--<span class="token interpolation"><span class="token variable">$boundary</span></span>\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"Content-Type: text/plain;\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">" name=\"attachment.txt\"\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"Content-Transfer-Encoding: base64\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"Content-Disposition: attachment;\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string single-quoted-string">' filename="'</span> <span class="token operator">.</span> <span class="token function">basename</span><span class="token punctuation">(</span><span class="token variable">$filename</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"\"\n\n"</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token variable">$content</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token variable">$message</span> <span class="token operator">.=</span> <span class="token string double-quoted-string">"\n--<span class="token interpolation"><span class="token variable">$boundary</span></span>--\n"</span><span class="token punctuation">;</span> <span class="token variable">$sent</span> <span class="token operator">=</span> <span class="token function">mail</span><span class="token punctuation">(</span><span class="token variable">$mailto</span><span class="token punctuation">,</span> <span class="token variable">$subject</span><span class="token punctuation">,</span> <span class="token variable">$message</span><span class="token punctuation">,</span> <span class="token variable">$header</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"\r\n<pre>\r\n"</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token punctuation">(</span><span class="token variable">$sent</span><span class="token punctuation">)</span><span class="token operator">?</span><span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y-m-d H:i:s'</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string double-quoted-string">": Mail wurde versandt\r\n"</span><span class="token punctuation">:</span><span class="token string double-quoted-string">"Mail wurde nicht versandt\r\n"</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"</pre>\r\n"</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> </code></pre> <p>Das funktioniert auch soweit, wenn der Client ein Thunderbird ist. Andere konnte ich leider nicht testen im Moment.</p> <p>Wenn ich den vermeintlichen Quelltext der empfangenen Mail dann speichere und ihn anschließend mit notepad++ in der Codierung "utf-8 ohne BOM" anschaue, wird auch alles richtig angezeigt.</p> <p>Alles, was der User sehen muss, zeigt der Thunderbird auch richtig an.</p> <p>Wenn ich mir den Quelltext aber nun anzeigen lassen mit "Thunderbird/Quelltext anzeigen", dann bekomme ich schon wieder Bauchschmerzen:</p> <p>Received: by h2222671.stratoserver.net (Postfix, from userid 33)<br> id C4D8B6CA097; Tue,  4 Mar 2014 14:10:03 +0100 (CET)<br> To: tschmieder@online.de<br> Subject: Mail-Test (8) ASCII mit ÄÖÜäöü and boundary<br> X-PHP-Originating-Script: 0:mailtest.php<br> from: info@bikers-lodge.com<br> Content-Type: multipart/mixed;<br>   boundary="----=_TSMail-Next-Part-1393938603"<br> Message-Id: <a href="mailto:20140304131003.C4D8B6CA097@h2222671.stratoserver.net" rel="nofollow noopener noreferrer">20140304131003.C4D8B6CA097@h2222671.stratoserver.net</a><br> Date: Tue,  4 Mar 2014 14:10:03 +0100 (CET)<br> Envelope-To: <a href="mailto:tschmieder@online.de" rel="nofollow noopener noreferrer">tschmieder@online.de</a><br> X-UI-Filterresults: notjunk:1;V01:K0:6ZHqduRylEA=:kdADYP2ysE4jZDDDsngeb5qM19<br>  higEP6GOVerbd3h59qnGdV5T75uNyUQvTAx5E866TZXIRtUg5ESlP7OUA5VDrQe+O0Kf5Y7DV<br>  mPU66X7FAN26W787qvhhsVmiGiln8zcnOaHY6i/tualP3aVxOkPinUDWOGY5DvjDduPMRYZkX<br>  aGgtFziOmbU044aL31xsjJxY8VSCH2tQOaLpRVqwla5g4pbCRhzkAtYOMjOdrTxDuoBgoDmYs<br>  Zz8hoAOIwoZFino4BuUuVekmtd1ZuI5Ch16hCRbuGYJESK5oSwhazIfzswjjJe75sPgDknz9x<br>  6QiAH5q9V8lDY8n/ygddW9be5kdK4nsq0x/AzB36S3B/1ZGVKnsOs5vcddTOlVUp6OfLsv3OV<br>  PZyjTnAzClasZagcVsREKfm6OR59G3cyWzcZ4BT1UGI9mInoebVDJEdBpJ6pZuBzddEEZlDwP<br>  wzBBpfmyQl8NPt4nXgWNBGtJaR7H5Bi3ix/cS4VflC9XdtBrzswray21ahQiunMQyNwpiN1AC<br>  Il16YMmc6sbiHYJa5EfUWZ82+DpUhBP/2mQV5mi+T8v/W+oKh6Vsx+Vt4lVYWjGL2L1GRk3FW<br>  IR/mWaHsduJhTpa0n0/4elb9z4e4XoZRA5TxNLjFD5W7FGB+zkSLarAgi14JKpf3Vh//ydCHp<br>  CoS1PGyg6V0TCLdbdel6Ec16P8TKTjMwAoLdf1alXtyI5S1lWAXumDmTHudSHNWfgzdi0eeeP<br>  Bdm15PgitVaYLeLnBel6+yvaE/aLmcX3nk5aJgHpitf4/T5tTYkwBOtBDUy5iEUA3BB8o68+d<br>  DTNGEGXua1Li8ojJ3QyKuCYGMk8XzMBrPHiaOkwCQW0lJ9kdjT8a4PCOF0AQxYxcsu4tDmHgf<br>  d64k9HJhgZPK/oN9ZLWiqw07ZUZ5gFdnykx4CM+VsxYwGeVsiZgExyo+fhHRvUdwijATBMRK3<br>  AoxDKsrdzxWk7qkNZwEBtNDd4j+mY4ysCMxkNBqDxP3oFMyx2pkwRL24ZFxCvomKU6tmtM7VS<br>  0YN81MHO0fp/KHRc65zDTAA/Iplbu2YjX/DyXUoh8chJtrfu1wo4X1UlPnUC/OBZOS/Ofj3mk<br>  M4Z0Y3bTmR6EBzYpOXp96abcknYuMjQn+OHosRxdivlqZrwzejeHCZ6IAo5YiEk0lcf5rnyVz<br>  BK+S8jTXi6KIW2ltXjGDXofhOuJ2x1dv/B5gCBrUD6MGFRV5aW78hST1vyvHyN61ETUdlumpm<br>  gELn96zooaruMBGPHn7yl1ajFDP/YzUFCzQ9/Dw5LtxEdhj4c2DHZ7e0=<br> Old-X-EsetId: 8DD79423D8FC0F37DC92C5<br> Old-X-EsetId: 8DD79423D8FC0F37DC92C5<br> Old-X-EsetId: 8DD79423D8FC0F37DC92C5<br> X-EsetId: 8DD79423D8FC0F37DC92C5</p> <p>Hier kommt der öffentliche Text mit dämlichen Ãœbelkeiten und Ödemen</p> <p>------=_TSMail-Next-Part-1393938603<br> Content-Type: text/plain;<br>   charset=iso-8859-1<br> Content-Transfer-Encoding: quoted-printable</p> <p>Das ist die Ansicht in iso-8859-1-Codierung. Die wäre aber für Mails eigentlich naheliegender, als utf-8, da mMn mailheader immer noch ausschließlich ASCII enthalten dürfen... Oder?</p> <p>Und woher hat der Mail-Server "Content-Transfer-Encoding: quoted-printable". Hab ich nirgends so angegeben. Ganz im Gegenteil, ich schrieb</p> <p><code>Content-Transfer-Encoding: 8bit\n\n";</code></p> <p>Das hatte ich mir aus einer alten Testmail von OE so rausgepult.</p> <p>Ich habe einfach im Moment den Überblick (und das Gedächtnis dafür) verloren, wer an welcher Stelle was verkurbelt, was ich nicht sofort sehe. Da ich keinen näheren Zugriff auf die Mailserver habe (weder Sender, noch Empfänger), kann ich leider auch nicht generisch (mit HEX-Editor) ind die gehandetlen Files reinschauen...</p> <p>Wer bringt mich mal wieder auf die Spur?</p> <p>Liebe Grüße aus dem schönen Oberharz</p> <p>Tom vom Berg<br> <img src="http://selfhtml.bitworks.de/Virencheck.gif" alt="" loading="lazy"></p> <div class="signature">-- <br>  ☻_<br> /▌<br> / \ Nur selber lernen macht schlau<br> <a href="http://bikers-lodge.com" rel="nofollow noopener noreferrer">http://bikers-lodge.com</a> </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604306#m1604306 ChrisB 2014-03-04T14:04:18Z 2014-03-04T14:04:18Z eMail senden mit mail(), Codierungsprobleme <p>Hi,</p> <blockquote> <p>Jedenfalls habe ich mich jetzt im Dschungel von Zeichencodierung, Transfer-Encoding, Header-Zeilen, was macht der Mailclient "einfach so?" usw. verlaufen.</p> </blockquote> <p>PHPMailer, Swift Mailer o.ä. – und *done*.</p> <p>Es lohnt den Aufwand einfach nicht, sich damit heutzutage selber noch auseinanderzusetzen – nur um dann am Ende vielleicht doch wieder irgendwas nicht bedacht zu haben, was deine Testfälle nicht abgedeckt haben.</p> <p>MfG ChrisB</p> <div class="signature">-- <br> Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/ </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604305#m1604305 tami 2014-03-04T14:34:21Z 2014-03-04T14:34:21Z eMail senden mit mail(), Codierungsprobleme <p>hi,</p> <p>also echo und .= mit Strings ist wirklich schwierig am Ende zu entziffern.</p> <p>mit ob_start() und $myText = ob_get_clean() und im Text dann <?php echo $myVar?> hast du zumindest übersichtlichen Code.</p> <p>Ansonsten Mail-Klasse vom ZendFramework analysieren: <a href="https://github.com/zendframework/zf2" rel="noopener noreferrer">https://github.com/zendframework/zf2</a></p> <p>mfg</p> <p>tami</p> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604304#m1604304 Der Martin self@kennst.net 2014-03-04T15:29:15Z 2014-03-04T15:29:15Z eMail senden mit mail(), Codierungsprobleme <p>Hi,</p> <blockquote> <pre><code class="block language-php"></code></pre> </blockquote> <p>$filename = <strong>FILE</strong>;</p> <blockquote> <p>$content  = chunk_split(base64_encode(file_get_contents($filename)), 76, PHP_EOL);<br> #$content = base64_encode(file_get_contents($filename), 76, PHP_EOL);</p> <p>$mailto = 'tschmieder@online.de';<br> $subject = 'Mail-Test (8) ASCII mit ÄÖÜäöü and boundary';<br> $message = 'Hier kommt der öffentliche Text mit dämlichen Übelkeiten und Ödemen';</p> </blockquote> <pre><code class="block"> Das geht schon mal in die Hose. Sobald in Headerzeilen non-ASCII-Zeichen auftauchen, muss der Wert entsprechend codiert werden. [Chris](https://forum.selfhtml.org/?t=216717&m=1486719) hat dir schon gezeigt, wie. > ~~~php $header = "from: info@bikers-lodge.com\n"; > $time       = time(); > $boundary   = "----=_TSMail-Next-Part-$time"; > > $header    .= "Content-Type: multipart/mixed;\n"; > $header    .= "  boundary=\"$boundary\"\n"; > > $message   .= "\n\n--$boundary\n"; > $message   .= "Content-Type: text/plain;\n"; > $message   .= "  charset=iso-8859-1\n"; > $message   .= "Content-Transfer-Encoding: 8bit\n\n"; > $message   .= "Test-Mail mit Anhang, bitte den Quelltext der Mail kopieren und nachher mitbringen\n\n"; > > $message   .= "\n--$boundary\n"; > $message   .= "Content-Type: text/plain;\n"; > $message   .= "  name=\"attachment.txt\"\n"; > $message   .= "Content-Transfer-Encoding: base64\n"; > $message   .= "Content-Disposition: attachment;\n"; > $message   .= '  filename="' . basename($filename) . "\"\n\n"; > $message   .= $content . PHP_EOL; > $message   .= "\n--$boundary--\n"; </code></pre> <p>Und ich bin mir immer wieder unsicher, ob man einfach ungestraft Linefeeds verwenden darf, anstatt der geforderten CR/LF-Kombination.</p> <blockquote> <p>Das funktioniert auch soweit, wenn der Client ein Thunderbird ist. Andere konnte ich leider nicht testen im Moment.<br> Wenn ich den vermeintlichen Quelltext der empfangenen Mail dann speichere und ihn anschließend mit notepad++ in der Codierung "utf-8 ohne BOM" anschaue, wird auch alles richtig angezeigt.</p> </blockquote> <p>Das ist "good will", würde ich sagen. Mit den Non-ASCII-Zeichen im Header sollte man mit allem rechnen.</p> <blockquote> <p>Wenn ich mir den Quelltext aber nun anzeigen lassen mit "Thunderbird/Quelltext anzeigen", dann bekomme ich schon wieder Bauchschmerzen:</p> </blockquote> <p>Warum? Weil die Non-ASCII-Zeichen nicht korrekt angezeigt werden? Die Codierung der Mail-Header ist nun mal ASCII. Ob 8bit-Codes da inzwischen erlaubt sind oder nur von den meisten MTAs stillschweigend geduldet werden, weiß ich nicht genau. Aber eine Interpretation der Byte-Sequenzen nach UTF-8? Warum? Woher?</p> <blockquote> <p>Und woher hat der Mail-Server "Content-Transfer-Encoding: quoted-printable". Hab ich nirgends so angegeben. Ganz im Gegenteil, ich schrieb</p> <p><code>Content-Transfer-Encoding: 8bit\n\n";</code></p> <p>Das hatte ich mir aus einer alten Testmail von OE so rausgepult.</p> </blockquote> <p>Das hat dann wahrscheinlich dein lokaler MTA schon umgestellt.</p> <blockquote> <p>Ich habe einfach im Moment den Überblick (und das Gedächtnis dafür) verloren, wer an welcher Stelle was verkurbelt, was ich nicht sofort sehe. Da ich keinen näheren Zugriff auf die Mailserver habe (weder Sender, noch Empfänger), kann ich leider auch nicht generisch (mit HEX-Editor) ind die gehandetlen Files reinschauen...</p> </blockquote> <p>Nur ganz am Anfang bzw. ganz am Ende der Übertragungskette.</p> <p>Ciao,<br>  Martin</p> <div class="signature">-- <br> Wenn man keine Ahnung hat - einfach mal Fresse halten.<br>   (Dieter Nuhr, deutscher Kabarettist)<br> Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:( </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604301#m1604301 hotti http://rolfrost.de 2014-03-04T16:05:19Z 2014-03-04T16:05:19Z eMail senden mit mail(), Codierungsprobleme <p>hi, Dein Code ist grausig. Vielleicht kriegst Du den etwas besser hin mit ein bischen Grundlagenverständnis.</p> <p>Content-Transfer-Encoding: 8bit<br>   ist gleich<br> Content-Transfer-Encoding: binary</p> <p>Unsicher, daher nicht empfehlenswert. Besser</p> <p>Content-Transfer-Encoding: quoted-printable<br>   oder<br> Content-Transfer-Encoding: base64</p> <p>und hier reden wir nur von den Texten. Quoted-printable ist zu bevorzugen, weil die Mail dann immer noch einigermaßen lesbar, was mit base64 nicht der Fall ist.</p> <p>Texte haben eine bestimmte Zeichen-Kodierung, guck:<br> Content-Type: text/plain; Charset=UTF-8<br>   oder<br> Content-Type: text/plain; Charset=ISO-8859-1<br>   o.a.</p> <p>Nun, quoted-printable oder base64 (Content-Transfer-Encoding), das wiederum hat mit der Zeichenkodierung überhaupt nichts zu tun, das sind reine Byte-Geschichten. Die Zeichenkodierung kommt erst dann ins Spiel, wenn der MailClient, nach der Übertragung mit einem bestimmten Content-Transfer-Encoding, aus den ankommenden Bytes wieder lesbare Zeichen machen soll.</p> <p>Header: Nur Ascii, wurde schon gesagt, Beispiel in Perl<br> <code class="language-perl">subject <span class="token operator">=></span> sprintf<span class="token punctuation">(</span><span class="token string">"=?%s?Q?%s?="</span><span class="token punctuation">,</span> <span class="token variable">$in</span><span class="token punctuation">{</span>charset<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token variable">$self</span><span class="token operator">-></span>quotePrint<span class="token punctuation">(</span><span class="token variable">$in</span><span class="token punctuation">{</span>subject<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span></code></p> <p>Heißt: Im Header selbst stehen Charset UND Content-Transfer-Encoding UND nur 7bit-Bytes (ASCII). Wobei das Q für quoted-printable steht, für base64 stünde da ein B</p> <p>Spätestens hier sollte Dir klar sein, was Charset und Content-Transfer-Encoding für eine Rolle und wie die zusammenspielen.</p> <p>Noch ein Wort zum Code: Mach ein Template, da verlierst Du auch nicht die Übersicht. Übergebe Deinem Konstruktor nicht eine Liste von $from, $to, $subject usw., sondern besser ein assoziatives Array, das macht den Code ungemein lesbarer. Gerade für multipart/mixed und Attachments eignet sich ein Template hervorragend. Baue so die Maildatei zusammen und Pipe auf <code class="language-perl">mta <span class="token operator">=></span> <span class="token string">'/usr/sbin/sendmail -t'</span><span class="token punctuation">,</span></code> das geht auch mit PHP vorzüglich.</p> <p>Viel Erfolg!</p> <div class="signature">-- <br> <a href="http://rolfrost.de/jsbytes.html" rel="nofollow noopener noreferrer">Byte Semantics mit JavaScript</a><br> </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604302#m1604302 Tom bitworks@web.de http://selfhtml.bitworks.de 2014-03-04T16:57:17Z 2014-03-04T16:57:17Z eMail senden mit mail(), Codierungsprobleme <p>Hello,</p> <p>ach Hotti, wenn ich Dich nicht hätte :-P</p> <p>Ist doch nur ein Testfile.</p> <p>Und für die Header-Codierung gibt es sogar eine fertige Funktion in PHP, die hatte ich nur noch nicht wieder rausgesucht.</p> <p><a href="http://de3.php.net/manual/en/function.mb-encode-mimeheader.php" rel="nofollow noopener noreferrer">http://de3.php.net/manual/en/function.mb-encode-mimeheader.php</a></p> <p>Die erwartet aber für den zu codierenden String scheinbar iso-8859-1. Oh Wunder!</p> <pre><code class="block language-php"> <span class="token variable">$subject</span> <span class="token operator">=</span> <span class="token function">mb_encode_mimeheader</span><span class="token punctuation">(</span><span class="token function">utf8_decode</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Mail-Test (10) ASCII mit ÄÖÜäöü and boundary'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"UTF-7"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"Q"</span><span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>führt jedenfalls zum Erfolg, wenn der Subject-Text in UTF-8 erfasst wurde, was der Fall ist, da die Daten aus der Datenbank kommen, in die sie mit utf-8 reingestopft wurden...</p> <p>Liebe Grüße aus dem schönen Oberharz</p> <p>Tom vom Berg<br> <img src="http://selfhtml.bitworks.de/Virencheck.gif" alt="" loading="lazy"></p> <div class="signature">-- <br>  ☻_<br> /▌<br> / \ Nur selber lernen macht schlau<br> <a href="http://bikers-lodge.com" rel="nofollow noopener noreferrer">http://bikers-lodge.com</a> </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604303#m1604303 hotti http://rolfrost.de 2014-03-04T18:47:59Z 2014-03-04T18:47:59Z eMail senden mit mail(), Codierungsprobleme <p>hi Du;</p> <blockquote> <p>Die erwartet aber für den zu codierenden String scheinbar iso-8859-1. Oh Wunder!</p> </blockquote> <p>Nein.<code class="language-php"> <span class="token function">mb_encode_mimeheader</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code> erwartet, dass<code class="language-php"> <span class="token function">mb_internal_encoding</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code> gesetzt wurde.</p> <p>Also machen wir das mal und gucken Ergebnis:</p> <pre><code class="block language-php"> <span class="token function">mb_internal_encoding</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"UTF-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">mb_encode_mimeheader</span><span class="token punctuation">(</span><span class="token function">utf8_decode</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'€'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"\n"</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token function">mb_encode_mimeheader</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'€'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Siehst Du was? '4oKs' ist die korrekte Base64-Kodierung für das EUR-Zeichen. Wenn Du vorher ein utf8_decode('€') schaltest, ist das Ergebnis nur ein Byte, darstellbar als Fragezeichen oder als Base64 'Pw=='.</p> <p>Die Funktionen machen schon das Richtige, Du musst die nur richtig anwenden.</p> <p>Horst</p> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604312#m1604312 Tom bitworks@web.de http://selfhtml.bitworks.de 2014-03-04T14:18:45Z 2014-03-04T14:18:45Z eMail senden mit mail(), Codierungsprobleme <p>Hello,</p> <blockquote> <blockquote> <p>Jedenfalls habe ich mich jetzt im Dschungel von Zeichencodierung, Transfer-Encoding, Header-Zeilen, was macht der Mailclient "einfach so?" usw. verlaufen.</p> </blockquote> <p>PHPMailer, Swift Mailer o.ä. – und *done*.</p> <p>Es lohnt den Aufwand einfach nicht, sich damit heutzutage selber noch auseinanderzusetzen – nur um dann am Ende vielleicht doch wieder irgendwas nicht bedacht zu haben, was deine Testfälle nicht abgedeckt haben.</p> </blockquote> <p>Das ist nett von Dir, dass Du mir Arbeit ersparen willst.<br> An die Verwendung einer fertigen Klasse habe ich selbstverständlich auch schon gedacht, aber...</p> <p>mir geht es hier nochmal um das Verstehen. Bezahlt werde ich sowieso nicht anständig für die Hilfeleistung und daher möchte ich zumindest meine verschütteten Kenntnisse zum Thema wieder ausgraben.</p> <p>Aber ich werde mal versuchen, in die genannten Fertiglösungen hineinzuschauen. Ist ja auch schon mal ein Ansatz.</p> <p>Liebe Grüße aus dem schönen Oberharz</p> <p>Tom vom Berg<br> <img src="http://selfhtml.bitworks.de/Virencheck.gif" alt="" loading="lazy"></p> <div class="signature">-- <br>  ☻_<br> /▌<br> / \ Nur selber lernen macht schlau<br> <a href="http://bikers-lodge.com" rel="nofollow noopener noreferrer">http://bikers-lodge.com</a> </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604307#m1604307 Felix Riesterer http://felix-riesterer.de/ 2014-03-19T08:53:46Z 2014-03-19T08:53:46Z eMail senden mit mail(), Codierungsprobleme <p>Lieber ChrisB,</p> <blockquote> <p>PHPMailer, Swift Mailer o.ä. – und *done*.</p> </blockquote> <p>das würde ich liebend gerne tun... nur sind diese Bibliotheken solche "Monster", dass ich dafür gleich eine ganze Verzeichnisstruktur in mein Projekt übernehmen muss, anstatt eine einzelne PHP-Datei (welche ich mir auch noch beliebig benennen könnte).</p> <p>Warum kriegt man solche "libs" eigentlich nicht "single-file"?</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> <div class="signature">-- <br> ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:) </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604308#m1604308 tami 2014-03-19T09:47:10Z 2014-03-19T09:47:10Z eMail senden mit mail(), Codierungsprobleme <p>hi,</p> <blockquote> <p>Lieber ChrisB,</p> <blockquote> <p>PHPMailer, Swift Mailer o.ä. – und *done*.</p> </blockquote> <p>das würde ich liebend gerne tun... nur sind diese Bibliotheken solche "Monster", dass ich dafür gleich eine ganze Verzeichnisstruktur in mein Projekt übernehmen muss, anstatt eine einzelne PHP-Datei (welche ich mir auch noch beliebig benennen könnte).</p> <p>Warum kriegt man solche "libs" eigentlich nicht "single-file"?</p> </blockquote> <p>Beim Zend-Framework hat jede Klasse erstmal einen File. Und wenn da noch mehrere Klassen zum assistieren benötigt werden, liegen die alle in einen gleichnamigen Ordner. Ich meine, du brauchst beim Zend-Framework im wesentlichen die Zend-Klasse und dann alles, was im Mail-Ordner drinne ist. Das war/ist(?) bei PEAR auch so (gewesen).</p> <p>Es steht Dir doch aber frei, Dir das zusammenzukopieren in ein File. Soooo viele Abhängigkeiten sollten das mWn. nich sein.</p> <p>mfg</p> <p>tami</p> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604309#m1604309 Felix Riesterer http://felix-riesterer.de/ 2014-03-19T12:08:46Z 2014-03-19T12:08:46Z eMail senden mit mail(), Codierungsprobleme <p>Lieber tami,</p> <blockquote> <p>Es steht Dir doch aber frei, Dir das zusammenzukopieren in ein File. Soooo viele Abhängigkeiten sollten das mWn. nich sein.</p> </blockquote> <p>bei JS-Bibliotheken bekommt man ja auch minifizierten Code - zumindest bei aktuellen. Da kann man sich sogar Dateien auf Paketen basierend zusammenstellen lassen. Warum nicht bei PHP-Klassen auch?</p> <p>In meinem Projekt benötige ich z.B. eine Möglichkeit, eine Excel-Datei auszulesen. Dazu habe ich eine Klasse gefunden, die nur eine weitere einbindet. Da war es kein Problem, den Inhalt der zweiten Datei an das Ende der ersten anzuhängen. Da war es auch klar, dass immer beide Dateien (Klassen) benötigt werden. Um eine MP3-Datei aus mehreren Einzeldateien zusammenzufügen war sogar in einer Einzeldatei als Klasse möglich! Aber bei diesen Mailern... da sehe ich vor lauter Wald keine Bäume!</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> <div class="signature">-- <br> ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:) </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604310#m1604310 tami 2014-03-19T21:07:54Z 2014-03-19T21:07:54Z eMail senden mit mail(), Codierungsprobleme <p>hi,</p> <blockquote> <p>Lieber tami,</p> <blockquote> <p>Es steht Dir doch aber frei, Dir das zusammenzukopieren in ein File. Soooo viele Abhängigkeiten sollten das mWn. nich sein.</p> </blockquote> <p>bei JS-Bibliotheken bekommt man ja auch minifizierten Code - zumindest bei aktuellen. Da kann man sich sogar Dateien auf Paketen basierend zusammenstellen lassen. Warum nicht bei PHP-Klassen auch?</p> <p>In meinem Projekt benötige ich z.B. eine Möglichkeit, eine Excel-Datei auszulesen. Dazu habe ich eine Klasse gefunden, die nur eine weitere einbindet. Da war es kein Problem, den Inhalt der zweiten Datei an das Ende der ersten anzuhängen. Da war es auch klar, dass immer beide Dateien (Klassen) benötigt werden. Um eine MP3-Datei aus mehreren Einzeldateien zusammenzufügen war sogar in einer Einzeldatei als Klasse möglich! Aber bei diesen Mailern... da sehe ich vor lauter Wald keine Bäume!</p> </blockquote> <p>Das liegt vielleicht daran, dass du mit dem Zend-Framework ja alles was möglich ist geliefert bekommst:</p> <p><a href="http://framework.zend.com/manual/1.12/de/zend.mail.introduction.html" rel="nofollow noopener noreferrer">http://framework.zend.com/manual/1.12/de/zend.mail.introduction.html</a></p> <p>Dafür ist die Bedienung dann ziemlich "idiotensicher" ...;</p> <p>mfg</p> <p>tami</p> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604311#m1604311 tami 2014-03-20T10:54:30Z 2014-03-20T10:54:30Z eMail senden mit mail(), Codierungsprobleme <p>hi,</p> <blockquote> <p>Das liegt vielleicht daran, dass du mit dem Zend-Framework ja alles was möglich ist geliefert bekommst:</p> <p><a href="http://framework.zend.com/manual/1.12/de/zend.mail.introduction.html" rel="nofollow noopener noreferrer">http://framework.zend.com/manual/1.12/de/zend.mail.introduction.html</a></p> </blockquote> <p>mal abgesehen davon, dass es schon länger eine 2.?? -Version gibt:</p> <p><a href="http://www.developers-guide.net/c/160-zend-framework-einfacher-e-mail-versand-ueber-zend_mail.html#benoetigt" rel="nofollow noopener noreferrer">http://www.developers-guide.net/c/160-zend-framework-einfacher-e-mail-versand-ueber-zend_mail.html#benoetigt</a></p> <p>mfg</p> <p>tami</p> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604313#m1604313 ChrisB 2014-03-04T14:45:16Z 2014-03-04T14:45:16Z eMail senden mit mail(), Codierungsprobleme <p>Hi,</p> <blockquote> <p>mir geht es hier nochmal um das Verstehen.</p> </blockquote> <p>Also wenn du im Subject Zeichen ausßerhalb von ASCII verwenden willst, dann solltest du es passend kodieren, das ist korrekt – alle Angaben zur Inhalts-Kodierung wie Content-Transfer-Encoding und Charset beziehen sich erst m.W. auf den Body-Part.</p> <p><code class="language-php"><span class="token variable">$subject</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'=?UTF-8?B?'</span><span class="token operator">.</span><span class="token function">base64_encode</span><span class="token punctuation">(</span><span class="token variable">$subject</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token string single-quoted-string">'?='</span><span class="token punctuation">;</span></code><br> wäre eine Variante, die für ein UTF-8 kodiertes Subject funktionieren sollte.</p> <p>Für ein paar mehr Details dazu schau mal hier: <a href="http://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/" rel="nofollow noopener noreferrer">http://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/</a></p> <p>MfG ChrisB</p> <div class="signature">-- <br> Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/ </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604314#m1604314 tami 2014-03-04T17:01:41Z 2014-03-04T17:01:41Z eMail senden mit mail(), Codierungsprobleme <p>hi,</p> <p>Ich mach mich bestimmt unbeliebt, aber:</p> <pre><code class="block language-php"> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token function">ob_start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token delimiter important">?></span></span> </code></pre> <p>?UTF-8?B?<code class="language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token function">base64_encode</span><span class="token punctuation">(</span><span class="token variable">$subject</span><span class="token punctuation">)</span><span class="token delimiter important">?></span></span> </code>?=;<br> und so weiter <?php echo $mitPHPVars?> und noch mehr</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$subject</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"ob_get_clean()"</span><span class="token delimiter important">?></span></span> </code></pre> <p>mfg</p> <p>tami</p> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604316#m1604316 Tom bitworks@web.de http://selfhtml.bitworks.de 2014-03-04T19:46:27Z 2014-03-04T19:46:27Z eMail senden mit mail(), Codierungsprobleme <p>Hello tami,</p> <blockquote> <p>Ich mach mich bestimmt unbeliebt, [...]</p> </blockquote> <p>Nee!.</p> <p>Aber wofür benötigst Du den Output-Buffer?</p> <p>Liebe Grüße aus dem schönen Oberharz</p> <p>Tom vom Berg<br> <img src="http://selfhtml.bitworks.de/Virencheck.gif" alt="" loading="lazy"></p> <div class="signature">-- <br>  ☻_<br> /▌<br> / \ Nur selber lernen macht schlau<br> <a href="http://bikers-lodge.com" rel="nofollow noopener noreferrer">http://bikers-lodge.com</a> </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604315#m1604315 hotti http://rolfrost.de 2014-03-08T10:55:37Z 2014-03-08T10:55:37Z eMail senden mit mail(), Codierungsprobleme <p>hi,</p> <blockquote> <p>Ich mach mich bestimmt unbeliebt,</p> </blockquote> <p>endlich mal einer, der sich Gedanken macht um eine sinnvolle Verwendung des OutputBuffers.</p> <blockquote> <p>aber:</p> </blockquote> <p>Warum nicht gleich ein Template für die Erstellung von Maildateien? Damit ergibt sich ein schön überschaubarer Code, Du siehst bereits im Template, wie die Maildatei aufgebaut ist und etwaige Fehler sind schnell eingekreist.</p> <p>Nein, Du machst Dich hier nicht unbeliebt. Es gibt immer noch ein paar Wenige, mit denen Du Deine Begeisterung fürs Programmieren (UND eigene Ideen) teilen kannst.</p> <blockquote> <p>?UTF-8?B?<code class="language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token function">base64_encode</span><span class="token punctuation">(</span><span class="token variable">$subject</span><span class="token punctuation">)</span><span class="token delimiter important">?></span></span> </code>?=;</p> </blockquote> <p>Auch ne Variante mit dem Vorteil, dass das Encoding mit dieser Funktion grundsätzlich unabhängig von jedwelchen Zeichenkodierungen ist und fernab von den seit Bestehen der mb_Funktionen ausgehenden Unklarheiten (diesbezüglich spricht das Forum Bände).</p> <p>Genauso wie Base64 ist Quoted-Printable auch eine reine Byte-Geschichte. Für Subject und Texte in Mails ist QP zu bevorzugen, da es diese Empfehlung schon seit Jahrzehnten gibt, ists mir auch einwenig unbegreiflich, wie sich PHP so stark machen konnte, ohne eine QP-Implementierung als Built-In ;)</p> <p>Es spricht jedoch absolut nichts dagegen, QP RFC-gerecht mit einer eigenen Funktion umzusetzen. Bitteschön dran denken: QP quotet nicht Zeichen sondern Bytes.</p> <p>Schönes Wochenende,<br> Horst</p> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604317#m1604317 tami 2014-03-05T09:30:31Z 2014-03-05T09:30:31Z eMail senden mit mail(), Codierungsprobleme <p>hi,</p> <blockquote> <p>Hello tami,</p> <blockquote> <p>Ich mach mich bestimmt unbeliebt, [...]</p> </blockquote> <p>Nee!.</p> <p>Aber wofür benötigst Du den Output-Buffer?</p> </blockquote> <p>Na, damit ich den Text als Text schreiben kann und alles besser lesbar wird. mit .= " ... " und echo "<pre> ..." betreibt man aus meiner Sicht sinnfreie Obfuscation, da Du immer aufpassen musst, dass Du mit der Escaperei keine Fehler baust und überhaupt den eigentlichen Text, auf den es ankommt, unlesbarer machst. Und reine Textausgaben kannst Du dann nur über den Output-Buffer einfangen ...; in Deinem Fall bei den Headern insbesonders.</p> <p>mfg</p> <p>tami</p> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604318#m1604318 Felix Riesterer http://felix-riesterer.de/ 2014-03-05T10:44:02Z 2014-03-05T10:44:02Z eMail senden mit mail(), Codierungsprobleme <p>Lieber tami,</p> <p>was bitte spricht denn dagegen, dass Du Dir alle HTML-Ausgaben in einer Variable sammelst, um am Ende diese mit einem einzigen echo oder print an den Browser zu senden?</p> <blockquote> <p>Na, damit ich den Text als Text schreiben kann und alles besser lesbar wird. mit .= " ... " und echo "<pre> ..." betreibt man aus meiner Sicht sinnfreie Obfuscation, da Du immer aufpassen musst, dass Du mit der Escaperei keine Fehler baust und überhaupt den eigentlichen Text, auf den es ankommt, unlesbarer machst. Und reine Textausgaben kannst Du dann nur über den Output-Buffer einfangen ...; in Deinem Fall bei den Headern insbesonders.</p> </blockquote> <p>Ich bin mir jetzt ziemlich sicher, dass ich nicht verstanden habe, was Du eigentlich sagen willst. "Reine Textausgaben" willst Du in welchem Kontext wohin senden? Welche Debug-Möglichkeiten könntest Du benötigen, die sich mit einer reinen Textdatei nicht lösen ließen?</p> <p>Da ich mir angewöhnt habe, meine neuen Projekte grundsätzlich lokalisierbar zu gestalten, verwende ich Textbausteine, die es grundsätzlich in de und en gibt, und die in einer JSON-Datei vorgehalten werden:</p> <pre><code class="block language-javascript"><span class="token punctuation">{</span> <span class="token string">"apply-button-text"</span> <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"de"</span> <span class="token operator">:</span> <span class="token string">"anwenden"</span><span class="token punctuation">,</span> <span class="token string">"en"</span> <span class="token operator">:</span> <span class="token string">"apply"</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token string">"guestbook-title"</span> <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">"de"</span> <span class="token operator">:</span> <span class="token string">"Gästebuch"</span><span class="token punctuation">,</span> <span class="token string">"en"</span> <span class="token operator">:</span> <span class="token string">"Guestbook"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>Solche Dateien sind in UTF-8 kodiert als "i18n.json"-Datei in meinem Projekt abgelegt und werden dann mittels einer "translate" genannten Funktion an Ort und Stelle verwendet. Wenn man es sich noch schöner machen will, dann kann man diese Textbausteine auch gleich in Templates nutzen:</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>{#guestbook-title}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>{#guestbook-title}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>input</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>apply<span class="token punctuation">"</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>submit<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>{#apply-button-text}<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span> </code></pre> <p>Mit einer schönen Ersetzungsfunktion lassen sich so die textuellen Bestandteile schön von der Programmlogik trennen und benötigen kein Geschwurbel mit <?= ...?> mehr. Auch der OutputBuffer wird so nicht mehr benötigt, da alles HTML in einer Variable vorgehalten wird, bis es an den Browser gesandt wird.</p> <p>Wozu will man seine Templates mit PHP-Code zumüllen??</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> <div class="signature">-- <br> ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:) </div> https://forum.selfhtml.org/self/2014/mar/4/email-senden-mit-mail-codierungsprobleme/1604319#m1604319 tami 2014-03-06T20:50:38Z 2014-03-06T20:50:38Z eMail senden mit mail(), Codierungsprobleme <p>hi,</p> <blockquote> <p>Wozu will man seine Templates mit PHP-Code zumüllen??</p> </blockquote> <p>Aber hier bei der Mailerei und dem Header gehts doch nicht mit JSON, oder?<br> Es macht keinen Sinn, 10 Zeilen mit .= " ... einzufangen. In meinen Augen. Da hat jeder so seine Vorlieben ;-).</p> <p>mfg</p> <p>tami</p>