Mail in reinem Text statt HTML
D. W.
- php
Hallo,
obwohl ich
$mail->isHTML(false);
angegeben habe, wird der Text im body in HTML ausgegeben.
$mail->isHTML(false);
$mail->Body = '<h1 style="color:red">Hallo</h1><br>
<p style="color: green;">ich bin hier</p>';
$mail->send();
Das selbe passiert, wenn ich
$mail->isHTML(false);
ganz weglasse.
Wo liegt mein Fehler?
Hallo,
$mail->isHTML(false);
Wo hast du diese Methode her? Im PHP-Manual finde ich sie nicht.
Nach dem Namen würde ich schließen, dass sie keine Set- sondern eine Get-Methode ist.
Gruß
Kalk
Du benutzt offenbar den PHPMailer. Gib das bitte an, damit keine für Dich und den Antwortenden ärgerliche Irrtümer auftreten.
$mail->isHTML(false);
Du behauptest gegenüber dem PHPMailer, dass der Body Text sei. Mehr macht das nicht. Wenn Du den übergebenen Text von HTML in Text umwandeln willst (wofür die Suchmaschinen ich viele schöne Möglichkeiten finden), dann musst Du das selbst tun. Der PHP_Mailer wird das nicht für Dich tun.
Wenn Du
$mail->isHTML( true );
übergibst, dann geschieht folgendes:
Der PHP-Maiuler baut ein Mail mit Headern für Multipart/Alternative und Du solltest zusätzlich(!) einen Text übergeben, welcher (= beste Variante 1) entweder eine Alternative zum HTML darstellt (Text-Variante des selben Inhaltes) oder (= schlechte Variante 2) wenigstens einen Hinweis enthält, dass man sich das Mail in der HTML-Ansicht ansehen solle.
Bei der zweiten Variante kann es aber sein, dass der Versender umgehend gefragt wird, ob er wenigstens geimpft ist.
Das passiert auch, wenn Du die ganz schlechte Variante 3 wählst und keinen Plaintext übergibst: Dann kommt von denjenigen, welche die HTML-Ansicht verweigern, die Frage, warum Du leere Mails schickst.
$mail->isHTML( true );
Bei der zweiten Variante kann es aber sein, dass der Versender umgehend gefragt wird, ob er wenigstens geimpft ist.
Danke für diese tolle Antwort!
Ich hatte
$mail->isHTML( false );
so interpretiert, dass der gesendete Text als normaler Text und nicht als HTML interpretiert wird und damit <h1> als <h1> ausgegeben und nicht als HTML-Tag interpretiert wird.
Ich hatte
$mail->isHTML( false );
so interpretiert, dass der gesendete Text als normaler Text und nicht als HTML interpretiert wird und damit <h1> als <h1> ausgegeben und nicht als HTML-Tag interpretiert wird.
Das „interpretieren“ des HTML-Partes einer Multipart-Mail ist Sache des Clients. Das eines als Plain-Text markierten auch. Er soll nicht - aber wie die Kinder nun mal sind…
Thunderbird tut es nicht…
Hallo D. W.,
<h1> als <h1> ausgegeben und nicht als HTML-Tag interpretiert wird.
Dafür jage den Text einmal durch htmlspecialchars() hindurch.
Rolf
Dafür jage den Text einmal durch htmlspecialchars() hindurch.
Ich hätte das Linux-Programm html2text im Angebot:
<?php
$html = '<!doctype html>
<html>
<head>
<title>Hallo Welt!</title>
<meta charset="UTF-8">
<meta sonstwas=\'sonstwas\'>
</head>
<body>
<h1>Hallo Jörg!</h1>
<p>Ärgerst Du Dich wegen € 2,00?</p>
<ul>
<li>Ja oder
<li>Nein
</ul>
</body>
';
exec( 'echo ' . escapeshellarg( $html ) . ' | html2text -ascii ', $lines );
$text = implode( "\r\n", $lines );
### So sendet man das mit dem PHPMailer:
#$mail->Body( $text );
#
echo "Text:\n";
echo $text . PHP_EOL;
Resultat:
****** Hallo Jörg! ******
Ärgerst Du Dich wegen € 2,00?
* Ja oder
* Nein
Fazit: „O.K. Die Krücke funktioniert also halbwegs…“
Bessere Variante:
Es gibt zwar auch eine Libary für PHP … aber wenn man HTML erzeugt kann man auch gleich einen sinnvollen Text-Output erzeugen. Das muss man oft genug sowieso machen (→ Tabellen, Links, ...)
P.S. Rolfs Beitrag kam wohl einen Tag zu spät, meiner (bis auf den ernst gemeinten Teil ab dem im vorletzten Satz über dem „P.S.“) halt zwei Tage.