contact form mail handler
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 -
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.
- ik zou bij regel 37/41 de functie htmlspecialchars() gebruiken.
Dat voorkomt dat iemand een stukje html/script opneemt in zijn bericht.
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);
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.
[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.
Als je nu 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.
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.
@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'?
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
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 ;)
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?
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?