Door
Lorenzho Dealorde
op 18-07-2018 16:02
gewijzigd op 18-07-2018 16:10
2.028 views
Is het volgende mogelijk?
Ik zou graag willen dat mijn email subs hun email adres te zien krijgen als ze een mail van ons krijgen.
Maar ik krijg een white space te zien als ik het script uitvoer.
Ik verzend het met Mime versie 1.0, Content type text/html en Charset is iso-8859-1.
En gebruik zoals altijd een flat file database.
Err, gebruik bij voorkeur output buffering zodat je geen compleet statische lappen tekst in een string hoeft te duwen:
<?php
ob_start(); // vang alle output op
?><html>
<head>
<title></title>
</head>
<body>
<p>Dear<?php echo $htmlSafeName; ?>,</p>
<p>rest van de content</p>
</body>
</html><?php
$mailBody = ob_get_clean(); // schrijf het resultaat weg naar $mailBody
?>
Daarnaast, je werkt hier nog steeds in de HTML context, OUTPUT dient dus zodanig ge-escaped te worden dat deze onschadelijk is binnen de genoemde context, $htmlSafeName zou dus HTML-safe gemaakt moeten worden, bijvoorbeeld door htmlspecialchars() toe te passen op de username. Je wilt namelijk iemand geen javascript exploit of wat dan ook mailen.
En dan zou je ook nog voor een flat file / template aanpak kunnen kiezen met placeholders, bijvoorbeeld:
<html>
<head>
<title></title>
</head>
<body>
<p>Dear [name],</p>
<p>rest van de content</p>
</body>
</html>
Waarbij je [name] met (HTML-safe) equivalenten vervangt via str_replace() bij het afdraaien van de foreach-loop.
Het bovenstaande script produceert geen HTML-document/output. Het doel van dit script is het bouwen van HTML-mailtjes lijkt mij. Output buffering kun je op verschillende manieren inzetten, in het bovenstaande script ben je dingen door elkaar aan het gooien.
Het enige wat je hoeft te bufferen is de HTML-tekst die je op wilt vangen om in een mailtje te zetten. Hiertoe zet je expliciet de buffering aan met ob_start() en beëindig je deze / vang je deze op met ob_get_clean(). Meer hoef je niet te doen.
En als je deze wilt personaliseren, zal de inhoud die per mail verschilt in elke stap van de foreach-mail ingesteld moeten worden. Nu staat $email (die van regel 32) nergens ingesteld? En deze verschilt ook niet per verzonden bericht (en wordt ook overschreven in regel 41).