format van mail via PHP
Hoe kan ik de lay-out van tekst van een via PHP verzonden e-mail aanpassen?
Ik heb een eenvoudig contactformuliertje:
De ontvangen mail ziet er dan vrij basic uit:
Ik zou graag de lay-out van deze mail willen aanpassen. Wie helpt?
Vriendelijke groet,
Guido
Ik heb een eenvoudig contactformuliertje:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<form method="post" action="emailscript.php">
Naam: <input type="text" name="naam"><p>
E-mailadres: <input type="text" name="emailadres"><p>
Je bericht: <textarea name="bericht"></textarea><p>
<input type="submit" value="Verstuur bericht">
</form>
Naam: <input type="text" name="naam"><p>
E-mailadres: <input type="text" name="emailadres"><p>
Je bericht: <textarea name="bericht"></textarea><p>
<input type="submit" value="Verstuur bericht">
</form>
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$message = print_r($_POST, true);
mail("[email protected]", "Mail vanaf de website", $message);
header('Location: bedankt.html');
?>
$message = print_r($_POST, true);
mail("[email protected]", "Mail vanaf de website", $message);
header('Location: bedankt.html');
?>
De ontvangen mail ziet er dan vrij basic uit:
Ik zou graag de lay-out van deze mail willen aanpassen. Wie helpt?
Vriendelijke groet,
Guido
Logisch...
De print_r() functie is vooral bedoeld voor ontwikkeling, zodat je kan zien wat er in een array zit. Op je 'live site' behoor je dit ook niet te gebruiken, en netjes de juiste $_POST waardes te echo'en, of je array met foreach door te lopen. Het boeit je bezoekers echt niks dat je een array gebruikt, en wat er in verpakt zit.
Dus als je de waardes los wilt tonen: $_POST['naam'], $_POST['emailadres'] etc....
Ik neem aan dat je deze basis hopelijk wel kent, lees het anders eens rustig door.
Nog een advies: Plaats na een location-header een exit();, want je script moet dan ook stoppen, en geen andere dingen uitvoeren.
De print_r() functie is vooral bedoeld voor ontwikkeling, zodat je kan zien wat er in een array zit. Op je 'live site' behoor je dit ook niet te gebruiken, en netjes de juiste $_POST waardes te echo'en, of je array met foreach door te lopen. Het boeit je bezoekers echt niks dat je een array gebruikt, en wat er in verpakt zit.
Dus als je de waardes los wilt tonen: $_POST['naam'], $_POST['emailadres'] etc....
Ik neem aan dat je deze basis hopelijk wel kent, lees het anders eens rustig door.
Nog een advies: Plaats na een location-header een exit();, want je script moet dan ook stoppen, en geen andere dingen uitvoeren.
Gewijzigd op 20/05/2019 19:39:41 door - Ariën -
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$message = '
<!DOCTYPE html>
<html lang="nl" xml:lang="nl" xmlns="http://www.w3.org/1999/xhtml">
<head>';
?>
$message = '
<!DOCTYPE html>
<html lang="nl" xml:lang="nl" xmlns="http://www.w3.org/1999/xhtml">
<head>';
?>
Enzovoort.
Maak er dus een volledige pagina van die correcte html bevat.
Gewijzigd op 20/05/2019 19:41:37 door - SanThe -
Mijn advies: Gebruik deze headers in je mail()-functie:
http://wiki.phpbeginners.nl/index.php?title=De_juiste_mailheaders
Ook kan je hier bepalen of je HTML wilt gebruiken, of andere dingen.
http://wiki.phpbeginners.nl/index.php?title=De_juiste_mailheaders
Ook kan je hier bepalen of je HTML wilt gebruiken, of andere dingen.
Gewijzigd op 20/05/2019 19:44:57 door - Ariën -
Als het niet al te fancy hoeft kun je ook gewoon "platte tekst" gaan met wat line breaks:
Voordeel is dat je geen gedoe hebt met htmlspecialchars(), geen extra headers, enz. Note: ik ben er wel even vanuit gegaan dat alle velden in de $_POST bestaan.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$message =
"Naam: {$_POST['naam']}\n" .
"E-mailadres: {$_POST['emailadres']}\n" .
"Bericht:\n\n{$_POST['bericht']}"
mail("[email protected]", "Mail vanaf de website", $message);
header('Location: bedankt.html');
?>
$message =
"Naam: {$_POST['naam']}\n" .
"E-mailadres: {$_POST['emailadres']}\n" .
"Bericht:\n\n{$_POST['bericht']}"
mail("[email protected]", "Mail vanaf de website", $message);
header('Location: bedankt.html');
?>
Voordeel is dat je geen gedoe hebt met htmlspecialchars(), geen extra headers, enz. Note: ik ben er wel even vanuit gegaan dat alle velden in de $_POST bestaan.
@Rob, in mijn initiële bericht heb ik toch de velden aangemaakt met bijvoorbeeld
Daarmee bestaat het veld "naam" toch; of zie ik dat verkeerd?
Vriendelijke groet,
Guido
Daarmee bestaat het veld "naam" toch; of zie ik dat verkeerd?
Vriendelijke groet,
Guido
Ze bestaan, maar het is wel zo netjes om te controleren of je het formulier via POST verstuurd hebt.
Code (php)
Gewijzigd op 21/05/2019 08:56:20 door - Ariën -
https://css-tricks.com/sending-nice-html-email-with-php/
HTML headers toevoegen en dan kan je zo je body gaan opmaken met extra HTML.
HTML headers toevoegen en dan kan je zo je body gaan opmaken met extra HTML.
Guido van Harten op 21/05/2019 08:47:17:
Daarmee bestaat het veld "naam" toch; of zie ik dat verkeerd?
Bij "normaal" gebruik zal het veld zeker bestaan. Maar alles wat client-side gebeurt ("in de browser") kan gemanipuleerd worden. Ondanks dat je dus een POST binnen krijgt kan het dus zijn dat er velden ontbreken, andere velden zijn toegevoegd, of dat de content van het veld niet is wat je verwacht (het veld "emailadres" hoeft bijvoorbeeld helemaal geen geldig e-mailadres te zijn, maar misschien "<'" - als iemand wat SQL-injectie en/of XSS wil testen).
Daarvoor bestaat (formulier)validatie. Een controlestap voordat je alles verder (blindelings) verwerkt.




