format van mail via PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido van Harten

Guido van Harten

20/05/2019 19:29:41
Quote Anchor link
Hoe kan ik de lay-out van tekst van een via PHP verzonden e-mail aanpassen?

Ik heb een eenvoudig contactformuliertje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$message
= print_r($_POST, true);
mail("pietjepuk@gmail.com", "Mail vanaf de website", $message);
header('Location: bedankt.html');
?>


De ontvangen mail ziet er dan vrij basic uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
Array
(
    [naam] => a
    [emailadres] => b
    [bericht] => c
)


Ik zou graag de lay-out van deze mail willen aanpassen. Wie helpt?

Vriendelijke groet,
Guido
 
PHP hulp

PHP hulp

18/09/2019 04:04:12
 
- Ariën -
Beheerder

- Ariën -

20/05/2019 19:34:32
Quote Anchor link
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.
Gewijzigd op 20/05/2019 19:39:41 door - Ariën -
 
- SanThe -

- SanThe -

20/05/2019 19:40:46
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$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 -
 
- Ariën -
Beheerder

- Ariën -

20/05/2019 19:44:46
Quote Anchor link
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.
Gewijzigd op 20/05/2019 19:44:57 door - Ariën -
 
Rob Doemaarwat

Rob Doemaarwat

20/05/2019 22:31:59
Quote Anchor link
Als het niet al te fancy hoeft kun je ook gewoon "platte tekst" gaan met wat line breaks:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$message
=
  "Naam: {$_POST['naam']}\n" .
  "E-mailadres: {$_POST['emailadres']}\n" .
  "Bericht:\n\n{$_POST['bericht']}"
mail("pietjepuk@gmail.com", "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.
 
Guido van Harten

Guido van Harten

21/05/2019 08:47:17
Quote Anchor link
@Rob, in mijn initiële bericht heb ik toch de velden aangemaakt met bijvoorbeeld
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Naam: <input type="text" name="naam">

Daarmee bestaat het veld "naam" toch; of zie ik dat verkeerd?

Vriendelijke groet,
Guido
 
- Ariën -
Beheerder

- Ariën -

21/05/2019 08:56:03
Quote Anchor link
Ze bestaan, maar het is wel zo netjes om te controleren of je het formulier via POST verstuurd hebt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if($_POST['REQUEST_METHOD'] == "POST") {
// verstuurd via POST method
} else {
// niet via POST verstuurd.
}
?>
Gewijzigd op 21/05/2019 08:56:20 door - Ariën -
 
Jelle Dnw

Jelle Dnw

21/05/2019 11:09:39
Quote Anchor link
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.
 
Rob Doemaarwat

Rob Doemaarwat

21/05/2019 16:57:32
Quote Anchor link
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).
 
Thomas van den Heuvel

Thomas van den Heuvel

21/05/2019 19:39:19
Quote Anchor link
Daarvoor bestaat (formulier)validatie. Een controlestap voordat je alles verder (blindelings) verwerkt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.