contact form mail handler
hey,
Ik heb deze mail handler ongeveer 2 jaar geleden geschreven. Nu alles werkte toen perfect. Nu pas ik mijn code aan voor de mail afhandelaar te gebruiken voor een andere website waar ik aan het werk ben. Nu ik vul alles in op het contact form en hij geeft geen fouten ofzo hij zegt dqt het verzonden is. maar heb hem ingesteld op mijn email adres en krijg gewoon niets binnen. al gezocht maar vind zelf geen fouten. Mss iemand die me hier kan helpen.
contact form
ik weet niet echt waar de fout zit.
Ik heb deze mail handler ongeveer 2 jaar geleden geschreven. Nu alles werkte toen perfect. Nu pas ik mijn code aan voor de mail afhandelaar te gebruiken voor een andere website waar ik aan het werk ben. Nu ik vul alles in op het contact form en hij geeft geen fouten ofzo hij zegt dqt het verzonden is. maar heb hem ingesteld op mijn email adres en krijg gewoon niets binnen. al gezocht maar vind zelf geen fouten. Mss iemand die me hier kan helpen.
contact form
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
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
<form action="verwerking.php" method="post">
<div>
<label for="name">Naam:</label>
<input type="text" id="name" name="name" />
</div>
<div>
<label for="mail">E-mail:</label>
<input type="e-mail" id="e-mail" name="e-mail" />
</div>
<div>
<label for="msg">Bericht:</label>
<textarea id="msg" name="msg"></textarea>
</div>
<div class="button">
<button type="submit">Send your message</button>
</div>
</form>
en de php:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['name'])) {
$error .= "naam is niet ingevuld<BR />";
} if (empty($_POST['e-mail'])) {
$error .= "e-mail is niet ingevuld<BR />";
} if (filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL)) {
echo '';
} else {
$error .= "Geen geldig email adres<BR />";
} if (empty($_POST['msg'])) {
$error .= "Uw vraag of opmerking is niet ingevuld<BR />";
}
if (empty($error)) {
$bericht .= "Mijn naam is: ". $_POST['name'].
"
Mijn email is: ".$_POST['e-mail'].
"
mijn vraag of opmerking is: ".$_POST['msg'];
mail("[email protected]", "reactie van de website", $bericht, "FROM: website naam");
echo "Uw aanvraag is verstuurd. We zullen u zo snel mogelijk contacteren."; header('Refresh: 3; url=contact.html');
} else {
echo "Gelieve alle gegevens correct in te vullen.<BR/><BR />";
echo "<FONT COLOR=\"#FF0000\">".$error."</FONT>";
}
} else {
echo "Formulier niet verstuurd. Gelieve alle gegevens correct in te vullen.";
}
?>
<div>
<label for="name">Naam:</label>
<input type="text" id="name" name="name" />
</div>
<div>
<label for="mail">E-mail:</label>
<input type="e-mail" id="e-mail" name="e-mail" />
</div>
<div>
<label for="msg">Bericht:</label>
<textarea id="msg" name="msg"></textarea>
</div>
<div class="button">
<button type="submit">Send your message</button>
</div>
</form>
en de php:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['name'])) {
$error .= "naam is niet ingevuld<BR />";
} if (empty($_POST['e-mail'])) {
$error .= "e-mail is niet ingevuld<BR />";
} if (filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL)) {
echo '';
} else {
$error .= "Geen geldig email adres<BR />";
} if (empty($_POST['msg'])) {
$error .= "Uw vraag of opmerking is niet ingevuld<BR />";
}
if (empty($error)) {
$bericht .= "Mijn naam is: ". $_POST['name'].
"
Mijn email is: ".$_POST['e-mail'].
"
mijn vraag of opmerking is: ".$_POST['msg'];
mail("[email protected]", "reactie van de website", $bericht, "FROM: website naam");
echo "Uw aanvraag is verstuurd. We zullen u zo snel mogelijk contacteren."; header('Refresh: 3; url=contact.html');
} else {
echo "Gelieve alle gegevens correct in te vullen.<BR/><BR />";
echo "<FONT COLOR=\"#FF0000\">".$error."</FONT>";
}
} else {
echo "Formulier niet verstuurd. Gelieve alle gegevens correct in te vullen.";
}
?>
ik weet niet echt waar de fout zit.
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 26/09/2016 12:52:09 door - Ariën -
Gebruik de juiste mailheaders:
http://wiki.phpbeginners.nl/index.php?title=De_juiste_mailheaders
En bouw ook foutafhanding in op je mail-functie. Als je foutmeldingen uit hebt staan, dan zien gebruikers altijd de melding dat het verstuurd is, zonder dat PHP er wat over kan zeggen.
Dus:
En even los van je probleem: <FONT> is al behoorlijk verouderd. Gebruik liever CSS om je tekst te stylen.
http://wiki.phpbeginners.nl/index.php?title=De_juiste_mailheaders
En bouw ook foutafhanding in op je mail-functie. Als je foutmeldingen uit hebt staan, dan zien gebruikers altijd de melding dat het verstuurd is, zonder dat PHP er wat over kan zeggen.
Dus:
Code (php)
En even los van je probleem: <FONT> is al behoorlijk verouderd. Gebruik liever CSS om je tekst te stylen.
Gewijzigd op 26/09/2016 14:00:56 door - Ariën -
@- Ariën -: Vergeet het if()je niet.
- moet er bij FROM geen mailadres staan?
- ik zou bij regel 37/41 de functie htmlspecialchars() gebruiken.
Dat voorkomt dat iemand een stukje html/script opneemt in zijn bericht.
- ik zou bij regel 37/41 de functie htmlspecialchars() gebruiken.
Dat voorkomt dat iemand een stukje html/script opneemt in zijn bericht.
Ik heb er dit van gemaakt :
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$mail_ontv = "[email protected]";
$subject = "Reactie van de website";
$headers = "From: " . $_POST['name'] . " <" . $_POST['e-mail'] . ">";
$bericht = "Mijn naam is: " . $_POST['name'] . "\n";
$bericht .= "Mijn email is: " . $_POST['e-mail'] . "\n";
$bericht .= "Mijn vraag of opmerking is: " . $_POST['msg'] . "\n";
mail($mail_ontv, $subject , $bericht, $headers);
$subject = "Reactie van de website";
$headers = "From: " . $_POST['name'] . " <" . $_POST['e-mail'] . ">";
$bericht = "Mijn naam is: " . $_POST['name'] . "\n";
$bericht .= "Mijn email is: " . $_POST['e-mail'] . "\n";
$bericht .= "Mijn vraag of opmerking is: " . $_POST['msg'] . "\n";
mail($mail_ontv, $subject , $bericht, $headers);
Okee, en wat zijn de bevindingen?
Let wel op header-injection. Iemand kan je headers eenvoudig manipulueren via je formulier en eventueel spam versturen. En pas foutafhandeling toe op je mail() functie.
Let wel op header-injection. Iemand kan je headers eenvoudig manipulueren via je formulier en eventueel spam versturen. En pas foutafhandeling toe op je mail() functie.
Als je nu [email protected] invult in het vakje Email, dan verstuurt jouw server dus een mail die afkomstig zou zijn van Obama.
De ontvangende mailserver zou daar zomaar zijn vraagtekens bij kunnen plaatsen. Immers, jouw server staat vast niet te boek als een legitieme afzender van mails van dat domein.
Begin eerst eens om daar info@jouwdomain in te vullen. En check of jouw dns settings zodanig zijn dat jouw server ook mail van dat domein zou moeten mogen versturen.
Daarna zou je nog kunnen kijken of je ook nog een andere afzender bij ReplyTo kunt invullen.
Bedenk dat er een verschil is tussen "mail wordt niet verstuurd" en "ik zie de mail niet aankomen".
Zeker partijen als Hotmail en Gmail hebben vrij strikte regels om spam tegen te gaan.
De ontvangende mailserver zou daar zomaar zijn vraagtekens bij kunnen plaatsen. Immers, jouw server staat vast niet te boek als een legitieme afzender van mails van dat domein.
Begin eerst eens om daar info@jouwdomain in te vullen. En check of jouw dns settings zodanig zijn dat jouw server ook mail van dat domein zou moeten mogen versturen.
Daarna zou je nog kunnen kijken of je ook nog een andere afzender bij ReplyTo kunt invullen.
Bedenk dat er een verschil is tussen "mail wordt niet verstuurd" en "ik zie de mail niet aankomen".
Zeker partijen als Hotmail en Gmail hebben vrij strikte regels om spam tegen te gaan.
Daarom gebruik ik liever PHPmailer of een andere kant en klare package om te mailen. Die hebben alle mailheaders en veiligheden al aan boord.
maar ook PHPmailer etc. kunnen niet controleren of het opgegeven mailadres mag versturen via de aangegeven server.
In principe komt de mail van (FROM) jouw server / jouw domain.
Daarnaast is er de ReplyTo optie, waarbij aangegeven wordt aan wie een antwoord gestuurd moet worden:
Eerste link die ik zo 123 vond via Google die dit aanstipt. Er is vast ook duidelijker uitleg te vinden:
http://serverfault.com/questions/398981/should-one-use-from-reply-to-or-both-headers-to-reflect-their-clients-emai
In principe komt de mail van (FROM) jouw server / jouw domain.
Daarnaast is er de ReplyTo optie, waarbij aangegeven wordt aan wie een antwoord gestuurd moet worden:
Eerste link die ik zo 123 vond via Google die dit aanstipt. Er is vast ook duidelijker uitleg te vinden:
http://serverfault.com/questions/398981/should-one-use-from-reply-to-or-both-headers-to-reflect-their-clients-emai
Ivo P op 26/09/2016 15:37:17:
maar ook PHPmailer etc. kunnen niet controleren of het opgegeven mailadres mag versturen via de aangegeven server.
True, maar het voorkomt wel dat iemand headers aan past om er vervolgens mee te spammen.
@Adoptive Solution ik heb jou oplossing geprobeerd maar neen.Ik krijg maar geen emails binnen. Vind dit heel raar.
@arien ja ik weet dat <font> al oud is. dit wordt nog aangepast ;) is ondertussen al een tijdje geleden geschreven :D
@iedereen kan het zijn dat er ergens een fout zit waardoor de ingegeven tekst niet wordt opgenomen in de php ofzo. Ik gok maar wat veel ervaring met php heb ik nog niet. maar ben wel aan het bijleren :D
@arien ja ik weet dat <font> al oud is. dit wordt nog aangepast ;) is ondertussen al een tijdje geleden geschreven :D
@iedereen kan het zijn dat er ergens een fout zit waardoor de ingegeven tekst niet wordt opgenomen in de php ofzo. Ik gok maar wat veel ervaring met php heb ik nog niet. maar ben wel aan het bijleren :D
Gewijzigd op 27/09/2016 13:48:56 door nicky de maeyer
Heb je al mijn link gevolgd over de 'juiste headers'?
Ja Ariën heb Adoptive Solution's $header aangepast zoals de link die je me gegeven hebt.
Toevoeging op 27/09/2016 14:20:33:
en Ariën heb juist de foutafhandeling toegepast. ik krijg geen fouten. gewoon dat de email is verstuurd.
Toevoeging op 27/09/2016 14:24:08:
Toevoeging op 27/09/2016 14:20:33:
en Ariën heb juist de foutafhandeling toegepast. ik krijg geen fouten. gewoon dat de email is verstuurd.
Toevoeging op 27/09/2016 14:24:08:
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
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
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['name'])) {
$error .= "naam is niet ingevuld<BR />";
} if (empty($_POST['e-mail'])) {
$error .= "e-mail is niet ingevuld<BR />";
} if (filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL)) {
echo '';
} else {
$error .= "Geen geldig email adres<BR />";
} if (empty($_POST['msg'])) {
$error .= "Uw vraag of opmerking is niet ingevuld<BR />";
}
if (empty($error)) {
$mail_ontv = "[email protected]";
$website_name="th-design";
$subject = "Reactie van de website";
$headers = 'From: ' . $website_name . ' <' . $mail_ontv . '>' . "\r\n";
$bericht = "Mijn naam is: " . $_POST['name'] . "\n";
$bericht .= "Mijn email is: " . $_POST['e-mail'] . "\n";
$bericht .= "Mijn vraag of opmerking is: " . $_POST['msg'] . "\n";
if(mail($mail_ontv, $subject , $bericht, $headers)) {
echo "Uw aanvraag is verstuurd. We zullen u zo snel mogelijk contacteren.";
header('Refresh: 3; url=contact.html');
} else {
echo "De mail is niet verstuurd vanwege een technische fout.";
}
}
else {
echo "Gelieve alle gegevens correct in te vullen.<BR/><BR />";
echo "<FONT COLOR=\"#FF0000\">".$error."</FONT>";
}
} else {
echo "Formulier niet verstuurd. Gelieve alle gegevens correct in te vullen.";
}
?>
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['name'])) {
$error .= "naam is niet ingevuld<BR />";
} if (empty($_POST['e-mail'])) {
$error .= "e-mail is niet ingevuld<BR />";
} if (filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL)) {
echo '';
} else {
$error .= "Geen geldig email adres<BR />";
} if (empty($_POST['msg'])) {
$error .= "Uw vraag of opmerking is niet ingevuld<BR />";
}
if (empty($error)) {
$mail_ontv = "[email protected]";
$website_name="th-design";
$subject = "Reactie van de website";
$headers = 'From: ' . $website_name . ' <' . $mail_ontv . '>' . "\r\n";
$bericht = "Mijn naam is: " . $_POST['name'] . "\n";
$bericht .= "Mijn email is: " . $_POST['e-mail'] . "\n";
$bericht .= "Mijn vraag of opmerking is: " . $_POST['msg'] . "\n";
if(mail($mail_ontv, $subject , $bericht, $headers)) {
echo "Uw aanvraag is verstuurd. We zullen u zo snel mogelijk contacteren.";
header('Refresh: 3; url=contact.html');
} else {
echo "De mail is niet verstuurd vanwege een technische fout.";
}
}
else {
echo "Gelieve alle gegevens correct in te vullen.<BR/><BR />";
echo "<FONT COLOR=\"#FF0000\">".$error."</FONT>";
}
} else {
echo "Formulier niet verstuurd. Gelieve alle gegevens correct in te vullen.";
}
?>
Gewijzigd op 27/09/2016 14:26:02 door nicky de maeyer
De From in de reactie van Adoptive Solution is niet correct.
Laat het stukje script met de headers zoals je nu hebt hier eens zien.
En staat de server vanwaar je de mail wilt sturen in het SPF record in de DNS?
Laat het stukje script met de headers zoals je nu hebt hier eens zien.
En staat de server vanwaar je de mail wilt sturen in het SPF record in de DNS?
heb ze hierboven nog eens de gehele php code gepost ;)
In de From staat nu een adres van hotmail.com en het is vast geen server van hotmail.com.
Zet hier een adres in die van de server/het domein zelf komt.
Toevoeging op 27/09/2016 14:29:27:
En waar is de rest van de headers?
Zet hier een adres in die van de server/het domein zelf komt.
Toevoeging op 27/09/2016 14:29:27:
En waar is de rest van de headers?
oke zal ik proberen ;)
ik zal de headers bijvullen ;)
ik zal de headers bijvullen ;)
Gewijzigd op 27/09/2016 14:30:38 door nicky de maeyer
Test het ook eens zonder headers, dus zonder 4e parameter.
heb het getest niets ik krijg altijd dat de email verstuurd is. En aan de server denk ik ook ni dat het ligt ik gebruik zowel een betalende .be als gratis webhosting. dus begrijp het echt niet meer :D
heb je het ook met een andere ontvangende server dan hotmail.com geprobeerd?
Staat de server niet ergens op een blacklist?




