Problemen met php contact formulier
Ik ben geen goede webmaster maar een beginner.
Ik heb een email template gedownload van een website. Alles werkt behalve wanneer ik het ingevulde formulier wil versturen geeft het een foutmelding namelijk "Could not send mail! Please check your PHP mail configuration."
Kan iemand mij hiermee helpen? Ik heb er al weken aan besteed voor de oplossing maar het lukt niet... :-(
Ik hoop dat jullie me verder kunnen helpen.
HTML CODE:
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
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
<!-- Contact section -->
<section id="contact" class="contact content-section no-bottom-pad">
<div class="container">
<div class="row text-center">
<div class="col-md-12">
<h2>Contact</h2>
<h3 class="caption gray">Neem gerust contact met ons op als je denkt dat wij je ergens mee kunnen helpen.</h3>
</div><!-- /.col-md-12 -->
</div><!-- /.row -->
</div><!-- /.container -->
<div class="container">
<div class="row form-container">
<div class="col-md-8 contact-form">
<h3>Laat een bericht achter</h3>
<form class="ajax-form" id="contactForm" method="post" action="assets/php/contact.php">
<div class="form-group">
<input type="text" class="form-control" id="name" name="name" placeholder="Jouw naam..." value="" required>
</div>
<div class="form-group">
<input type="email" class="form-control" id="email" name="email" placeholder="Jouw email..." value="" required>
</div>
<div class="form-group">
<input type="phone" class="form-control" id="phone" name="phone" placeholder="Jouw telefoonnummer..." value="" required>
</div>
<div class="form-group">
<textarea class="form-control" rows="4" name="message" placeholder="Jouw bericht..." required></textarea>
</div>
<div class="form-group">
<button type="submit" name="submit" class="btn btn-default"><i class="fa fa-paper-plane fa-fw"></i>Verzenden</button>
</div>
</form>
</div><!-- /.contact-form -->
<section id="contact" class="contact content-section no-bottom-pad">
<div class="container">
<div class="row text-center">
<div class="col-md-12">
<h2>Contact</h2>
<h3 class="caption gray">Neem gerust contact met ons op als je denkt dat wij je ergens mee kunnen helpen.</h3>
</div><!-- /.col-md-12 -->
</div><!-- /.row -->
</div><!-- /.container -->
<div class="container">
<div class="row form-container">
<div class="col-md-8 contact-form">
<h3>Laat een bericht achter</h3>
<form class="ajax-form" id="contactForm" method="post" action="assets/php/contact.php">
<div class="form-group">
<input type="text" class="form-control" id="name" name="name" placeholder="Jouw naam..." value="" required>
</div>
<div class="form-group">
<input type="email" class="form-control" id="email" name="email" placeholder="Jouw email..." value="" required>
</div>
<div class="form-group">
<input type="phone" class="form-control" id="phone" name="phone" placeholder="Jouw telefoonnummer..." value="" required>
</div>
<div class="form-group">
<textarea class="form-control" rows="4" name="message" placeholder="Jouw bericht..." required></textarea>
</div>
<div class="form-group">
<button type="submit" name="submit" class="btn btn-default"><i class="fa fa-paper-plane fa-fw"></i>Verzenden</button>
</div>
</form>
</div><!-- /.contact-form -->
PHP CODE:
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
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
<?php
header('Content-type: application/json');
if($_POST)
{
$to_email = "[email protected]"; //Recipient email, Replace with own email here
//check if its an ajax request, exit if not
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
$output = json_encode(array( //create JSON data
'type'=>'error',
'text' => 'Sorry Request must be Ajax POST'
));
die($output); //exit script outputting json data
}
//Sanitize input data using PHP filter_var().
$user_name = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
$user_email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
$phone_number = filter_var($_POST["phone"], FILTER_SANITIZE_NUMBER_INT);
$message = filter_var($_POST["message"], FILTER_SANITIZE_STRING);
//additional php validation
if(strlen($user_name)<4){ // If length is less than 4 it will output JSON error.
$output = json_encode(array('type'=>'error', 'text' => 'Naam is te kort of leeg'));
die($output);
}
if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
$output = json_encode(array('type'=>'error', 'text' => 'Vul alsjeblieft een geldig email in'));
die($output);
}
if(!filter_var($phone_number, FILTER_SANITIZE_NUMBER_FLOAT)){ //check for valid numbers in phone number field
$output = json_encode(array('type'=>'error', 'text' => 'Voer alleen cijfers in'));
die($output);
}
if(strlen($message)<3){ //check emtpy message
$output = json_encode(array('type'=>'error', 'text' => 'Sorry, een te kort bericht. Vul iets in'));
die($output);
}
//email subject
$subject ='Bericht via de website Force 10';
//email body
$message_body = $message."\r\n\r\n-".$user_name."\r\n\r\nEmail : ".$user_email."\r\nPhone Number : ". $phone_number ;
//proceed with PHP email.
$headers = 'From: '.$user_name.'<'.$user_email.'>'."\r\n" .
'Reply-To: '.$user_name.'<'.$user_email.'>' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$send_mail = mail($to_email, $subject, $message_body, $headers);
if(!$send_mail)
{
//If mail couldn't be sent output error. Check your PHP email configuration (if it ever happens)
$output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.'));
die($output);
}else{
$output = json_encode(array('type'=>'success', 'text' => 'Hi '.$user_name .', Bedankt voor je bericht. We zullen zsm contact opnemen.'));
die($output);
}
}
?>
header('Content-type: application/json');
if($_POST)
{
$to_email = "[email protected]"; //Recipient email, Replace with own email here
//check if its an ajax request, exit if not
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
$output = json_encode(array( //create JSON data
'type'=>'error',
'text' => 'Sorry Request must be Ajax POST'
));
die($output); //exit script outputting json data
}
//Sanitize input data using PHP filter_var().
$user_name = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
$user_email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
$phone_number = filter_var($_POST["phone"], FILTER_SANITIZE_NUMBER_INT);
$message = filter_var($_POST["message"], FILTER_SANITIZE_STRING);
//additional php validation
if(strlen($user_name)<4){ // If length is less than 4 it will output JSON error.
$output = json_encode(array('type'=>'error', 'text' => 'Naam is te kort of leeg'));
die($output);
}
if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
$output = json_encode(array('type'=>'error', 'text' => 'Vul alsjeblieft een geldig email in'));
die($output);
}
if(!filter_var($phone_number, FILTER_SANITIZE_NUMBER_FLOAT)){ //check for valid numbers in phone number field
$output = json_encode(array('type'=>'error', 'text' => 'Voer alleen cijfers in'));
die($output);
}
if(strlen($message)<3){ //check emtpy message
$output = json_encode(array('type'=>'error', 'text' => 'Sorry, een te kort bericht. Vul iets in'));
die($output);
}
//email subject
$subject ='Bericht via de website Force 10';
//email body
$message_body = $message."\r\n\r\n-".$user_name."\r\n\r\nEmail : ".$user_email."\r\nPhone Number : ". $phone_number ;
//proceed with PHP email.
$headers = 'From: '.$user_name.'<'.$user_email.'>'."\r\n" .
'Reply-To: '.$user_name.'<'.$user_email.'>' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$send_mail = mail($to_email, $subject, $message_body, $headers);
if(!$send_mail)
{
//If mail couldn't be sent output error. Check your PHP email configuration (if it ever happens)
$output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.'));
die($output);
}else{
$output = json_encode(array('type'=>'success', 'text' => 'Hi '.$user_name .', Bedankt voor je bericht. We zullen zsm contact opnemen.'));
die($output);
}
}
?>
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken. Quote-tags zijn uitsluitend bedoeld voor citaten.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt![/modedit]
Gewijzigd op 19/07/2016 20:19:15 door Jan Smit
PS: Om spam te voorkomen heb ik je e-mailadres uit je bericht gehaald.
Gewijzigd op 19/07/2016 18:41:06 door - Ariën -
Heb je meer bestanden? Misschien een config bestand waarin je een SMTP server in moet vullen? Zo niet, zijn de SMTP gegevens van de server goed ingevuld? Kun je wel een mail naar jezelf sturen met de functie mail() ?
Alvast bedankt dat jullie me willen helpen.
Ik draai alles op de server van mijn webhost. Niets zelf aangemaakt.
Waar in de code zou ik de SMTP gegevens in moeten invullen dan? Moet ik misschien niet bepaalde SMTP parameters aan de code toevoegen? Zo ja, welke en waar?
Hoe stuur ik een mail naar mijzelf met de functie mail()
(een groentje ben ik he :-))
Ik heb ook nog een code gevonden mbt contact form in een JavaScript. Maar volgens mij heeft dat niets met uitgaande mail server te maken toch?
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
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
// Contact form
$(function() {
// validate contact form on keyup and submit
$("#contactForm").validate({
rules: {
name: {
required: true,
minlength: 2,
lettersonly: true
},
email: {
required: true,
minlength: 6,
email: true
},
phone: {
required: true,
digits: true,
minlength: 10,
maxlength: 15
},
message: {
required: true,
minlength: 6
}
},
messages: {
name: {
required: "Vul aub je naam in",
minlength: "Minimaal 2 karakters",
lettersonly: "Alleen letters aub!"
},
email: {
required: "Vul aub je emailadres in",
minlength: "Minimaal 6 karakters",
email: "Dat is een ongeldige email"
},
phone: {
required: "Vul aub je telefoonnummer in",
digits: "Alleen cijfers. Geen spaties aub",
minlength: "Minimaal 10 karakters",
maxlength: "Maximaal 15 karakters"
},
message: {
required: "Vul aub je bericht in",
minlength: "Minimaal 6 karakters"
}
},
success: function(label) {
label.addClass("valid").text("Dat ziet er goed uit!");
},
submitHandler: function(element) {
var ajaxform = $(element),
url = ajaxform.attr('action'),
type = ajaxform.attr('method'),
data = {};
$(ajaxform).find('[name="submit"]').html('<i class="fa fa-circle-o-notch fa-spin fa-fw"></i> Aan het versturen...');
ajaxform.find('[name]').each(function(index, value) {
var field = $(this),
name = field.attr('name'),
value = field.val();
data[name] = value;
});
$.ajax({
url: url,
type: type,
data: data,
success: function(response) {
if (response.type == 'success') {
$("#contactForm").before("<div class='alert alert-success' role='alert'><a href='#' class='close' data-dismiss='alert'>×</a>" + response.text + "</div>");
$(ajaxform).each(function() {
this.reset();
$(this).find('[name="submit"]').html('<i class="fa fa-paper-plane fa-fw"></i> Send');
}).find('.valid').each(function() {
$(this).remove('label.valid');
})
} else if (response.type == 'error') {
$("#contactForm").before("<div class='alert alert-danger' role='alert'><a href='#' class='close' data-dismiss='alert'>×</a>" + response.text + "</div>");
$(ajaxform).find('[name="submit"]').html('<i class="fa fa-paper-plane fa-fw"></i> Send');
}
}
});
return false;
}
});
});
$(function() {
// validate contact form on keyup and submit
$("#contactForm").validate({
rules: {
name: {
required: true,
minlength: 2,
lettersonly: true
},
email: {
required: true,
minlength: 6,
email: true
},
phone: {
required: true,
digits: true,
minlength: 10,
maxlength: 15
},
message: {
required: true,
minlength: 6
}
},
messages: {
name: {
required: "Vul aub je naam in",
minlength: "Minimaal 2 karakters",
lettersonly: "Alleen letters aub!"
},
email: {
required: "Vul aub je emailadres in",
minlength: "Minimaal 6 karakters",
email: "Dat is een ongeldige email"
},
phone: {
required: "Vul aub je telefoonnummer in",
digits: "Alleen cijfers. Geen spaties aub",
minlength: "Minimaal 10 karakters",
maxlength: "Maximaal 15 karakters"
},
message: {
required: "Vul aub je bericht in",
minlength: "Minimaal 6 karakters"
}
},
success: function(label) {
label.addClass("valid").text("Dat ziet er goed uit!");
},
submitHandler: function(element) {
var ajaxform = $(element),
url = ajaxform.attr('action'),
type = ajaxform.attr('method'),
data = {};
$(ajaxform).find('[name="submit"]').html('<i class="fa fa-circle-o-notch fa-spin fa-fw"></i> Aan het versturen...');
ajaxform.find('[name]').each(function(index, value) {
var field = $(this),
name = field.attr('name'),
value = field.val();
data[name] = value;
});
$.ajax({
url: url,
type: type,
data: data,
success: function(response) {
if (response.type == 'success') {
$("#contactForm").before("<div class='alert alert-success' role='alert'><a href='#' class='close' data-dismiss='alert'>×</a>" + response.text + "</div>");
$(ajaxform).each(function() {
this.reset();
$(this).find('[name="submit"]').html('<i class="fa fa-paper-plane fa-fw"></i> Send');
}).find('.valid').each(function() {
$(this).remove('label.valid');
})
} else if (response.type == 'error') {
$("#contactForm").before("<div class='alert alert-danger' role='alert'><a href='#' class='close' data-dismiss='alert'>×</a>" + response.text + "</div>");
$(ajaxform).find('[name="submit"]').html('<i class="fa fa-paper-plane fa-fw"></i> Send');
}
}
});
return false;
}
});
});
Ik denk dat je even een zijsprongetje moet maken. Jouw script dat je als eerste gepost hebt maakt gebruik van de php mail() functie op regel 57 van het tweede stukje script. Als je nu op php.net naar deze functie kijkt en dan kijkt wat deze functie terug kan geven dan kun je lezen dat dit TRUE is als het aanleveren voor verzending goed gaat of FALSE als het niet lukt. In jouw situatie krijg je dus blijkbaar een FALSE terug. Hoogstwaarschijnlijk komt dat omdat jouw provider de mail() functie heeft uitgeschakeld. Je zou dit in de FAQ van je provider terug moeten kunnen vinden of anders middels de support.
De kans bestaat dat je te horen krijgt dat je de email via SMTP moet versturen. In dat geval is dit script niet toereikend genoeg en kun je het beste gebruik maken van PHPMailer. Dit zal je waarschijnlijk erg ingewikkeld overkomen maar met een beetje hulp van ons is dit wel te doen.
Ik heb wederom contact gehad met mijn host. Ivm veiligheidsmaatregelen kan het formulier niet verstuurd worden vanuit een ander emailadres. Dit moet altijd een eigen server adres zijn (in mijn geval @force10.tv
Zij zeggen: "...omdat je formulier momenteel dusdanig in elkaar zit dat het het ingevulde e-mail adres (bijvoorbeeld het @hotmail adres wat je noemt) als afzender adres gebruikt, maar dit mag dus niet (het from: adres). Het afzender adres moet altijd, in dit geval, een @force10.tv adres zijn, dit moet als statische waarde worden ingesteld."
Wanneer ik een @force10.tv adres in het formulier invul, dan wordt het formulier wel verstuurd.
Verder zeggen zij:" ...maar je zult wel nog zelf het formulier moeten aanpassen zodat de afzender (het FROM en REPLY-TO adres) altijd een @force10.tv adres is."
Maar hoe geef ik in de php code aan dat From: een @force10.tv adres moet zijn? Kan iemand mij helpen met het toevoegen/plaatsen van deze parameters in de code?
Alvast heel erg veel dank!
Groet,
Eelco
[email protected]", "standaard e-mail naam");
Toevoeging op 21/07/2016 12:12:14:
Ik dat je geen PHPmailer gebruikt, dan kan je dit aanpassen:
$headers = 'From: 'JOUWNAAM'<'JOUW E-mail'>'."\r\n" .
$phpMailer->SetFrom("Toevoeging op 21/07/2016 12:12:14:
Ik dat je geen PHPmailer gebruikt, dan kan je dit aanpassen:
$headers = 'From: 'JOUWNAAM'<'JOUW E-mail'>'."\r\n" .
Ik heb de regel aangepast maar het formulier wordt nog niet weg gezonden.
Code (php)
1
2
3
2
3
$headers = 'From: 'Force 10' <'[email protected]'>'."\r\n" .
'Reply-To: '.$user_name.' <'.$user_email.'>' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
'Reply-To: '.$user_name.' <'.$user_email.'>' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
Doe ik nog iets verkeerd?
versus
Let eens goed op de quotes (' en ")!
en download een php editor zoals bijvoorbeeld Netbeans
zodat er direct dit soort fouten getoond worden.
Dank voor je antwoord.
Waar zit de fout in dan? Want in de code wordt " en ' afwisselend gebruikt?
Toevoeging op 21/07/2016 19:50:40:
Hi,
Het is verholpen! Het formulier werkt nu succesvol.
Juiste code is:
Code (php)
1
2
3
2
3
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: '.$user_name.' <'.$user_email.'>' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
'Reply-To: '.$user_name.' <'.$user_email.'>' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
En dit terwijl het er twee zouden moeten zijn om het begin en het einde van het tekstblok (of string) aan te geven. Bijvoorbeeld:
Heb je nu toch een ' teken nodig midden in een string dan zul je die moeten escapen met een backslash (\).
Voorbeeld:
Hetzelfde heb je met double quotes alleen kun je met double quotes wat meer trucjes uithalen waaronder de "\r" en "\n" die voor carriage return en new line staan.
Om deze reden schrijf ik mijn database queries (Opdrachten) het liefst tussen double quotes omdat single quotes in de queries gebruikt worden.
Bijvoorbeeld:
Bedankt voor je duidelijke uitleg! PHP is zoveel anders dan html. Pfieuw... Oefening baart kunst! :-)