PHP Formulier komt soms niet goed op de mail...
Het is een prijsaanvraagformulier waar men verschillende vakjes invult en dan komt het vervolgens aan in onze mailbox op het bedrijf.
Alleen soms krijgen we de mail dubbel binnen en in het gekste geval krijgen we het formulier binnen met het antwoord van 1 vakje maar dan in alle vakjes van het formulier terwijl daar dus eigenlijk wat anders hoort te staan... , dus dat klopt helemaal niet. (hopelijk snappen jullie wat ik bedoel X_x)
Hier is het script >
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
session_start(); // zorg ervoor dat session_start ALTIJD bovenaan ALLES van je pagina staat, anders werkt het niet!
// E-mailadres van de ontvanger
$mail_ontv = '[email protected]' ; // <<<----- voer jouw e-mailadres hier in!
// Speciale checks voor naam en e-mailadres
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// naam controle
if (!preg_match('/[ a-zA-Z-]$/', $_POST['naam']))
$naam_fout = 1;
// e-mail controle
if (function_exists('filter_var') && !filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL))
$email_fout = 1;
}
// Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn
if (($_SERVER['REQUEST_METHOD'] == 'POST' && ( empty($_POST['naam']) || !empty($naam_fout) || empty($_POST['mail']) || !empty($email_fout) || empty($_POST['bericht5']) || empty($_POST['bericht4']) || empty($_POST['bericht3']) || empty($_POST['bericht1']) || empty($_POST['bericht2']))) || $_SERVER['REQUEST_METHOD'] == 'GET')
{
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (!empty($naam_fout))
echo '<p>Uw naam mag alleen letters bevatten.</p>';
elseif (!empty($email_fout))
echo '<p>Uw e-mailadres is niet juist.</p>';
else
echo '<p>U bent uw naam, e-mailadres of telefoonnummer vergeten in te vullen.</p>';
}
// HTML e-mail formlier
echo '<form method="post" action="' . $_SERVER['REQUEST_URI'] . '" />
<p>
<label for="naam">Naam :</label><br />
<input type="text" id="naam" name="naam" value="' . htmlspecialchars($_POST['naam']) . '" /><br />
<label for="mail">E-mailadres :</label><br />
<input type="text" id="mail" name="mail" value="' . htmlspecialchars($_POST['mail']) . '" /><br />
<label for="naam">Telefoonnummer :</label><br />
<input type="text" id="telefoonnummer" name="telefoonnummer" value="' . htmlspecialchars($_POST['telefoonnummer']) . '" /><br />
<label for="onderwerp">Van Land/Postcode :</label><br />
<textarea id="text" name="bericht1" rows="1" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
<label for="onderwerp">Naar Land/Postcode :</label><br />
<textarea id="text" name="bericht2" rows="1" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
<label for="onderwerp">Aantal/Type Pallets / Laadmeter :</label><br />
<textarea id="text" name="bericht3" rows="1" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
<label for="onderwerp">Gewicht / Afmetingen :</label><br />
<textarea id="text" name="bericht4" rows="1" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
<label for="onderwerp">Gewenste Ophaal en Afleverdatum :</label><br />
<textarea id="text" name="bericht5" rows="3" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br />
<label for="bericht">Extra Informatie :</label><br />
<textarea id="bericht" name="bericht" rows="7" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br />
<input type="submit" name="submit" value=" Versturen " />
</p>
</form>';
}
// versturen naar
else
{
// set datum
$datum = date('d/m/Y H:i:s');
$inhoud_mail = "===================================================\n";
$inhoud_mail .= "Prijsaanvraag via Website " . $_SERVER['HTTP_HOST'] . "\n\n";
$inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER['REMOTE_ADDR'] . "\n\n";
$inhoud_mail .= "Naam : " . htmlspecialchars($_POST['naam']) . "\n\n";
$inhoud_mail .= "E-mail adres : " . htmlspecialchars($_POST['mail']) . "\n\n";
$inhoud_mail .= "Telefoonnummer : " . htmlspecialchars($_POST['telefoonnummer']) . "\n\n";
$inhoud_mail .= "Van Land/Postcode : " . htmlspecialchars($_POST['bericht1']) . "\n\n";
$inhoud_mail .= "Naar Land/Postcode : " . htmlspecialchars($_POST['bericht2']) . "\n\n";
$inhoud_mail .= "Aantal/Type Pallets / Laadmeter : " . htmlspecialchars($_POST['bericht3']) . "\n\n";
$inhoud_mail .= "Gewicht / Afmetingen : " . htmlspecialchars($_POST['bericht4']) . "\n\n";
$inhoud_mail .= "Gewenste Ophaal en Afleverdatum : " . htmlspecialchars($_POST['bericht5']) . "\n\n";
$inhoud_mail .= "Extra Informatie :\n";
$inhoud_mail .= htmlspecialchars($_POST['bericht']) . "\n\n";
$inhoud_mail .= "===================================================\n\n";
// --------------------
// spambot protectie
// ------
$headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['mail'] . '>';
$headers = stripslashes($headers);
$headers = str_replace('\n', '', $headers); // Verwijder \n
$headers = str_replace('\r', '', $headers); // Verwijder \r
$headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
if (mail($mail_ontv, 'Prijsaanvraag via XXXX.nl', $inhoud_mail, $headers))
{
echo '<h1>Uw Prijsaanvraag is verzonden</h1>
<p>Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk uw Prijsaanvraag in behandeling nemen!.</p>';
}
else
{
echo '<h1>Uw Prijsaanvraag is niet verzonden, er is iets mis gegaan.</h1>
<p><b>Onze excuses.</b> Uw Prijsaanvraag kon niet verzonden worden, er is iets mis gegaan.</p>';
}
}
?>
session_start(); // zorg ervoor dat session_start ALTIJD bovenaan ALLES van je pagina staat, anders werkt het niet!
// E-mailadres van de ontvanger
$mail_ontv = '[email protected]' ; // <<<----- voer jouw e-mailadres hier in!
// Speciale checks voor naam en e-mailadres
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// naam controle
if (!preg_match('/[ a-zA-Z-]$/', $_POST['naam']))
$naam_fout = 1;
// e-mail controle
if (function_exists('filter_var') && !filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL))
$email_fout = 1;
}
// Kijk of alle velden zijn ingevuld - naam mag alleen uit letters bestaan en het e-mailadres moet juist zijn
if (($_SERVER['REQUEST_METHOD'] == 'POST' && ( empty($_POST['naam']) || !empty($naam_fout) || empty($_POST['mail']) || !empty($email_fout) || empty($_POST['bericht5']) || empty($_POST['bericht4']) || empty($_POST['bericht3']) || empty($_POST['bericht1']) || empty($_POST['bericht2']))) || $_SERVER['REQUEST_METHOD'] == 'GET')
{
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (!empty($naam_fout))
echo '<p>Uw naam mag alleen letters bevatten.</p>';
elseif (!empty($email_fout))
echo '<p>Uw e-mailadres is niet juist.</p>';
else
echo '<p>U bent uw naam, e-mailadres of telefoonnummer vergeten in te vullen.</p>';
}
// HTML e-mail formlier
echo '<form method="post" action="' . $_SERVER['REQUEST_URI'] . '" />
<p>
<label for="naam">Naam :</label><br />
<input type="text" id="naam" name="naam" value="' . htmlspecialchars($_POST['naam']) . '" /><br />
<label for="mail">E-mailadres :</label><br />
<input type="text" id="mail" name="mail" value="' . htmlspecialchars($_POST['mail']) . '" /><br />
<label for="naam">Telefoonnummer :</label><br />
<input type="text" id="telefoonnummer" name="telefoonnummer" value="' . htmlspecialchars($_POST['telefoonnummer']) . '" /><br />
<label for="onderwerp">Van Land/Postcode :</label><br />
<textarea id="text" name="bericht1" rows="1" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
<label for="onderwerp">Naar Land/Postcode :</label><br />
<textarea id="text" name="bericht2" rows="1" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
<label for="onderwerp">Aantal/Type Pallets / Laadmeter :</label><br />
<textarea id="text" name="bericht3" rows="1" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
<label for="onderwerp">Gewicht / Afmetingen :</label><br />
<textarea id="text" name="bericht4" rows="1" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br
/>
<label for="onderwerp">Gewenste Ophaal en Afleverdatum :</label><br />
<textarea id="text" name="bericht5" rows="3" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br />
<label for="bericht">Extra Informatie :</label><br />
<textarea id="bericht" name="bericht" rows="7" style="width: 400px;">' . htmlspecialchars($_POST['bericht']) . '</textarea><br />
<input type="submit" name="submit" value=" Versturen " />
</p>
</form>';
}
// versturen naar
else
{
// set datum
$datum = date('d/m/Y H:i:s');
$inhoud_mail = "===================================================\n";
$inhoud_mail .= "Prijsaanvraag via Website " . $_SERVER['HTTP_HOST'] . "\n\n";
$inhoud_mail .= "Verstuurd op " . $datum . " via het IP adres " . $_SERVER['REMOTE_ADDR'] . "\n\n";
$inhoud_mail .= "Naam : " . htmlspecialchars($_POST['naam']) . "\n\n";
$inhoud_mail .= "E-mail adres : " . htmlspecialchars($_POST['mail']) . "\n\n";
$inhoud_mail .= "Telefoonnummer : " . htmlspecialchars($_POST['telefoonnummer']) . "\n\n";
$inhoud_mail .= "Van Land/Postcode : " . htmlspecialchars($_POST['bericht1']) . "\n\n";
$inhoud_mail .= "Naar Land/Postcode : " . htmlspecialchars($_POST['bericht2']) . "\n\n";
$inhoud_mail .= "Aantal/Type Pallets / Laadmeter : " . htmlspecialchars($_POST['bericht3']) . "\n\n";
$inhoud_mail .= "Gewicht / Afmetingen : " . htmlspecialchars($_POST['bericht4']) . "\n\n";
$inhoud_mail .= "Gewenste Ophaal en Afleverdatum : " . htmlspecialchars($_POST['bericht5']) . "\n\n";
$inhoud_mail .= "Extra Informatie :\n";
$inhoud_mail .= htmlspecialchars($_POST['bericht']) . "\n\n";
$inhoud_mail .= "===================================================\n\n";
// --------------------
// spambot protectie
// ------
$headers = 'From: ' . htmlspecialchars($_POST['naam']) . ' <' . $_POST['mail'] . '>';
$headers = stripslashes($headers);
$headers = str_replace('\n', '', $headers); // Verwijder \n
$headers = str_replace('\r', '', $headers); // Verwijder \r
$headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes
if (mail($mail_ontv, 'Prijsaanvraag via XXXX.nl', $inhoud_mail, $headers))
{
echo '<h1>Uw Prijsaanvraag is verzonden</h1>
<p>Bedankt voor het invullen van het contactformulier. We zullen zo spoedig mogelijk uw Prijsaanvraag in behandeling nemen!.</p>';
}
else
{
echo '<h1>Uw Prijsaanvraag is niet verzonden, er is iets mis gegaan.</h1>
<p><b>Onze excuses.</b> Uw Prijsaanvraag kon niet verzonden worden, er is iets mis gegaan.</p>';
}
}
?>
Gewijzigd op 27/07/2011 12:17:25 door Wouter Snijders
Je gebruikt sowieso niet de goede mail headers, waardoor hij in de spambox kan komen.
Als ik zou vrij mag zijn santhe?
http://phpwiki.santhe.nl/index.php/De_juiste_mailheaders
Tevens snap ik niet waarom er 2x (regel 19 + 21):
Je gebruikt ook:
dit verwijst naar de 'name' in je input veld. die zijn daar gedefinieerd als : bericht1, bericht2, bericht3, bericht4
Als je dus de 1e keer iets fout invult dan krijg je in alle velden bericht te zien ipv bericht3 die het had moeten zijn.
Waar haal jij: $naam_fout vandaan (en meerdere vergelijkbare variablen)? Deze vind ik niet eerder gedefinieerd.
Dit is geen goede fout afhandeling:
Vertaald: Als $naam_fout niet leeg is dan geef je een error? een uitroepteken doet het tegenovergestelde.
Gewijzigd op 27/07/2011 13:35:59 door Bas IJzelendoorn
Ik heb dit script van iemand overgenomen die het ook gebruikt , en het werkt ook 8 van de 10 keer goed , alleen soms dus niet , vandaar dat ik mijn vraag hier neerzette zodat iemand de fouten er voor mij uit kan halen en een verbeterde versie kan geven.
BTW , het is nog nooit in de spambox gekomen dus dat werkt wel goed.
Gewijzigd op 27/07/2011 13:40:07 door Wouter Snijders
Ik wil best tegen betaling/vergoeding (op factuur mogelijk) een formulier bouwen met anti-spam beveiliging, goede mail headers en goede fout afhandeling. Mocht je interesse hebben kan je me een PM sturen.
Bedankt voor je reactie, ik zal het in gedachten houden! , alleen ik denk niet dat mijn baas zit te wachten op een ander formulier waarvoor betaald moeten worden...maar ik zal het aan hem voorleggen.
8 van de 10 is zeker niet goed genoeg , dus ik hoop dat iemand de fouten er uit kan halen en een goede versie kan plaatsen voor ons.
Deze regel bijvoorbeeld, heb je maar één keer nodig:
if ($_SERVER['REQUEST_METHOD'] == 'POST')
Verder heeft Bas al diverse dingen aangegeven.
Mag het niks kosten? Begin dan opnieuw en doe het beter.
Dat iets niet in de spambox komt bij jou is geen garantie. Zoals reeds gezegd, de mailheaders zijn niet correct. Het kan zelfs zijn dat sommige servers de mail niet eens aanpakken.
PS Nog even wat anders , misschien bedoel je met mailheader dat [email protected] , dat heb ik natuurlijk even verzonnen , dus dat klopt.
Gewijzigd op 27/07/2011 14:40:55 door Wouter Snijders
Wouter Snijders op 27/07/2011 14:35:59:
Nog even wat anders , misschien bedoel je met mailheader dat [email protected] , dat heb ik natuurlijk even verzonnen , dus dat klopt.
Nee, de inhoud van From is al fout.
Zie die link:
Bas IJzelendoorn op 27/07/2011 13:35:07:
Toevoeging op 27/07/2011 15:15:12:
@SanThe of Bas
Ik heb net die mailheaders gebruikt , maar nu krijg ik een Internal Server Error ,
Wat moet ik wel en niet gebruiken van dit script? , en het gedeelte van Afzender is toch niet nodig? , want dat vullen de klanten in het formulier in.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
// Geef GELDIGE adressen op
// Een korte benaming voor jouw website
$website_naam = 'XXXX';
// Jouw eigen geldige emailadres
$eigen_emailadres = '[email protected]';
// Een geldig emailadres voor errors
$error_emailadres = '[email protected]';
// De naam van de verzender
$naam_verzender = '?';
// Het geldige emailadres van de afzender
$email_verzender = '???';
// Een geldig emailadres of helemaal leeg laten
$bcc_emailadres = '???';
// HTML mail? True/False
$html = true;
// De headers samenstellen
$headers = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . PHP_EOL;
$headers .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . PHP_EOL;
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . PHP_EOL;
$headers .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . PHP_EOL : '';
$headers .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
$headers .= 'X-Priority: Normal' . PHP_EOL;
$headers .= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . PHP_EOL : '';
?>
// Geef GELDIGE adressen op
// Een korte benaming voor jouw website
$website_naam = 'XXXX';
// Jouw eigen geldige emailadres
$eigen_emailadres = '[email protected]';
// Een geldig emailadres voor errors
$error_emailadres = '[email protected]';
// De naam van de verzender
$naam_verzender = '?';
// Het geldige emailadres van de afzender
$email_verzender = '???';
// Een geldig emailadres of helemaal leeg laten
$bcc_emailadres = '???';
// HTML mail? True/False
$html = true;
// De headers samenstellen
$headers = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . PHP_EOL;
$headers .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . PHP_EOL;
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . PHP_EOL;
$headers .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . PHP_EOL : '';
$headers .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
$headers .= 'X-Priority: Normal' . PHP_EOL;
$headers .= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . PHP_EOL : '';
?>