mail form wordt geblokkeert door webmail
ik heb een account op one.com maar men form komt daar niet aan bij men webmail.
Als ik het form naar hotmail stuur komt het wel aan maar bij ongewenst (wordt geblokkeerd door smartscreen filters). Kan ik op een (vrij eenvoudige) manier deze code iets beter maken? Ik denk dat het door $_POST code komt. Alvast bedankt! Jannes.
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
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
<?php
// your email address
$youremail = "[email protected]";
$name = $_POST['name'];
$email = $_POST['email'];
$telefoon = $_POST['telefoon'];
$day = $_POST['day'];
$month = $_POST['month'];
$year = $_POST['year'];
$uur = $_POST['uur'];
$personen = $_POST['personen'];
$straat = $_POST['straat'];
$gemeente = $_POST['gemeente'];
$opmerkingen = $_POST['opmerkingen'];
// field validation
if ($email=="" || $name=="" || $telefoon=="" || $uur=="" || $personen=="" || $straat=="" || $gemeente=="")
{
print ("Gelieve alle velden in te vullen. Ga terug en probeer opnieuw.");
}
else {
// email validation
if(!eregi('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$', $email)) {
print ("U heeft geen geldig email adres ingevuld. Ga terug en probeer opnieuw.");
exit;
}
// send email
$headers = "From: \"$name\" <$email>\n";
$subject = "Paella reservatie";
$message = "Naam: $name\n
Email: $email\n
Telefoon: $telefoon\n
Datum: $day $month $year\n
Uur: $uur\n
Personen: $personen\n
Straat: $straat\n
Gemeente: $gemeente\n
Opmerking: $opmerkingen";
mail ("$youremail", "$subject", $message, $headers);
print ("Bedankt voor uw bestelling, wij nemen zo snel mogelijk contact met u op.");
}
?>
// your email address
$youremail = "[email protected]";
$name = $_POST['name'];
$email = $_POST['email'];
$telefoon = $_POST['telefoon'];
$day = $_POST['day'];
$month = $_POST['month'];
$year = $_POST['year'];
$uur = $_POST['uur'];
$personen = $_POST['personen'];
$straat = $_POST['straat'];
$gemeente = $_POST['gemeente'];
$opmerkingen = $_POST['opmerkingen'];
// field validation
if ($email=="" || $name=="" || $telefoon=="" || $uur=="" || $personen=="" || $straat=="" || $gemeente=="")
{
print ("Gelieve alle velden in te vullen. Ga terug en probeer opnieuw.");
}
else {
// email validation
if(!eregi('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$', $email)) {
print ("U heeft geen geldig email adres ingevuld. Ga terug en probeer opnieuw.");
exit;
}
// send email
$headers = "From: \"$name\" <$email>\n";
$subject = "Paella reservatie";
$message = "Naam: $name\n
Email: $email\n
Telefoon: $telefoon\n
Datum: $day $month $year\n
Uur: $uur\n
Personen: $personen\n
Straat: $straat\n
Gemeente: $gemeente\n
Opmerking: $opmerkingen";
mail ("$youremail", "$subject", $message, $headers);
print ("Bedankt voor uw bestelling, wij nemen zo snel mogelijk contact met u op.");
}
?>
Wat ik zou doen is iig een library zoals PHPMailer gebruiken en kijken of je een SMTP server kunt gebruiken voor het verzenden.
Deze worden vaak(er) als "vertrouwd" gemarkeerd ipv in de spam filters opgepakt.
- Je doet geen controle of de mail verstuurd is, je gaat nu zelf maar zeggend at het gelukt is, zonder dat je er enige controle erop doet.
- Variabelen horen buiten quotes
- Je doet nergens een controle of je formulier is versturud met POST:
- Gebruik liever phpMailer of SwiftMailer als je een mail stuurt. Dit zorgt ervoor dat je altijd de juiste mailheaders gebruikt, en dat deze niet misbruikt kunnen worden d.m.v. mailheader-injection.
Tijd voor een flinke overhaul van dit script.
bdankt voor de snelle reactie. ik ken PHPMailer niet maar zal het direct uitzoeken
er blijft altijd een risico, ook met phpmailer, swiftmailer en dergelijke, wanneer je from domein niet overeenkomt met het daadwerkelijke domein van de smtp/sendmail server die je gebruikt om te versturen. Ontvangende servers checken dat en wanneer er verschil is wordt het gewantrouwd en soms helemaal geweigerd.
- Aar - op 19/01/2011 16:07:47:
.. dat deze niet misbruikt kunnen worden d.m.v. mailheader-injection.
Jouw script is gevoelig voor email-injection.
Verder zijn de headers niet compleet en niet correct.
http://phpwiki.santhe.nl/index.php/De_juiste_mailheaders
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
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
<?php
if(getenv("HTTP_REFERER") != 'http://www.xxxxxxxxxxxxxxxxx.nl/form.html'){
die('error');
}else{
// your email address
$youremail = "[email protected]";
$name = $_POST['name'];
$email = $_POST['email'];
$telefoon = $_POST['telefoon'];
$day = $_POST['day'];
$month = $_POST['month'];
$year = $_POST['year'];
$uur = $_POST['uur'];
$personen = $_POST['personen'];
$straat = $_POST['straat'];
$gemeente = $_POST['gemeente'];
$opmerkingen = $_POST['opmerkingen'];
// field validation
if ($email=="" || $name=="" || $telefoon=="" || $uur=="" || $personen=="" || $straat=="" || $gemeente=="")
{
print ("Gelieve alle velden in te vullen. Ga terug en probeer opnieuw.");
}
else {
// email validation
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email))
{
print ("U heeft geen geldig email adres ingevuld. Ga terug en probeer opnieuw.");
exit;
}
// send email
$headers = "From: \"$name\" <$email>\n";
$subject = "reservatie";
$message = "Naam: $name\n
Email: $email\n
Telefoon: $telefoon\n
Datum: $day $month $year\n
Uur: $uur\n
Personen: $personen\n
Straat: $straat\n
Gemeente: $gemeente\n
Opmerking: $opmerkingen";
mail ("$youremail", "$subject", $message, $headers);
print ("Bedankt voor uw bestelling, wij nemen zo snel mogelijk contact met u op.");
}
}
?>
if(getenv("HTTP_REFERER") != 'http://www.xxxxxxxxxxxxxxxxx.nl/form.html'){
die('error');
}else{
// your email address
$youremail = "[email protected]";
$name = $_POST['name'];
$email = $_POST['email'];
$telefoon = $_POST['telefoon'];
$day = $_POST['day'];
$month = $_POST['month'];
$year = $_POST['year'];
$uur = $_POST['uur'];
$personen = $_POST['personen'];
$straat = $_POST['straat'];
$gemeente = $_POST['gemeente'];
$opmerkingen = $_POST['opmerkingen'];
// field validation
if ($email=="" || $name=="" || $telefoon=="" || $uur=="" || $personen=="" || $straat=="" || $gemeente=="")
{
print ("Gelieve alle velden in te vullen. Ga terug en probeer opnieuw.");
}
else {
// email validation
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email))
{
print ("U heeft geen geldig email adres ingevuld. Ga terug en probeer opnieuw.");
exit;
}
// send email
$headers = "From: \"$name\" <$email>\n";
$subject = "reservatie";
$message = "Naam: $name\n
Email: $email\n
Telefoon: $telefoon\n
Datum: $day $month $year\n
Uur: $uur\n
Personen: $personen\n
Straat: $straat\n
Gemeente: $gemeente\n
Opmerking: $opmerkingen";
mail ("$youremail", "$subject", $message, $headers);
print ("Bedankt voor uw bestelling, wij nemen zo snel mogelijk contact met u op.");
}
}
?>
ik vond deze snippet om alles behalve letters, cijfers en spaties te verwijderen
om malcode tegen te gaan.
$output = preg_replace("/[^a-z \d]/i", "", $input);
kan ik deze toepassen bij het declareren van mijn variablen?
ik zou er dit van maken:
$bericht = preg_replace("/[^a-z \d]/i", "", ($_POST['bericht']));
of
$FirstName = strip_tags($_POST['FirstName']);
dit vond ik ook juist, beetje hetzelfde denk ik?
nog een vraagje:
volstaat dit om te laten weten dat het verstuurd is of niet?
$isMailed = mail($to, $subject, $body, $headers);
if($isMailed){
echo "Thank you for your inquery, " . $FirstName . " " . $LastName . " We will get back to you shortly.";
}else{
echo "There seemed to be a problem";
}
- getenv van http_referer is oud.
- http_referer is onbetrouwbaar.
- http_referer staat niet altijd aan.
- 'or die' is geen foutafhandeling. Kan hier sowieso weg.
- regel 12 t/m 22, variabelen kopieëren is onzin.
- e-mailadressen zijn niet te valideren met regexen.
- Zie wat preg_match teruggeeft.
- exit is in principe alleen mogelijk na een header.
- mail injection mogelijk.
- Variabelen buiten quotes is beter.
- Dingen als "$youremail" is totale onzin.
toch bedankt,
Jannes
Toevoeging op 25/01/2011 16:21:51:
$isMailed = mail ("[email protected]", "$subject", $message, $headers);
if($isMailed){
header ("Location: bedankt.html");
}
iemand een idee waarom de verwijzing naar bedankt.html niet werkt?
als ik er echo "Bedankt"; zet werkt het wel
Toevoeging op 25/01/2011 16:29:42:
oh ik lees juist dat het niet binnen de if() mag staan. maar ik moet toch weten dan het wel zeker verstuurd is? hoe kan ik dit het beste oplossen? bedankt
Toevoeging op 25/01/2011 17:17:35:
of komt het door dit bovenaan?
if($_SERVER['REQUEST_METHOD']=="POST") {
Toevoeging op 25/01/2011 18:37:05:
echo "tekst \n tekst": komt ook gewoon op 1 lijn
Gewijzigd op 24/01/2011 20:54:57 door jannes vermeersch