contact formulier verzend niet
Ik heb zelf uit interesse het scriptje van Thomas gedraait.
Het werkt perfect. Op het scherm krijg ik "succes" als melding te zien
en ik ontvang de mail als volgt op mijn mailadres:
1.0
text/plain; charset=iso-8859-1
<[email protected]>
PHP/5.3.1
Getest op mijn locale xampp server.
Dus je zult iets meer moeten laten zien van je script willen we je kunnen helpen.
Gewijzigd op 11/08/2018 00:22:35 door hans cappon
Quote:
Getest op mijn locale xampp server.
Dan heb je wss wel e.e.a. geconfigureerd t.a.v. SMTP in XAMPP correct?
Maar fijn dat mijn code werkt, had het verder niet eens getest :p.
Het gaat er alleen om dat het niet werkt bij de hosting, en dat ik niet snap waarom niet. Heb het script van Thomas ook op een andere server geprobeerd waarvan ik zeker weet dat die PHP goed verzend maar ook daar werkt het niet. ben ten einde raad en hoop dat iemand nog een goed idee heeft.
gr Gertjan
Je zou minimaal moeten zien dat wel wel of niet gelukt is. Anders zit er in de syntax van je script mogelijk wat mis.
Probeer het zo eens:
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
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
<?php
$name = $_POST['name'];
$from = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$to = '[email protected]'; // @todo dit adres dient correct ingesteld te worden
$headers = array();
$headers['MIME-Version'] = "1.0";
$headers['Content-type'] = "text/plain; charset=iso-8859-1";
$headers['From'] = "{$name} <{$from}>"; // let op: is nu $from ipv $jouw_mail
$headers['Reply-To'] = "{$from}"; // moesten hier wel punthaken staan?
$headers['Subject'] = "{$subject}";
$headers['X-Mailer'] = "PHP/".phpversion();
// for backwards compatibility (PHP < 7.2.0)
function implodeHeaders($in, $linebreak="\r\n") {
$out = '';
foreach ($in as $k => $v) {
// @todo kan ook geen kwaad om hier wat mail header injection controles te doen...
$out .= $k.': '.$v.$linebreak;
}
return $out;
}
// hier controleren we of het "verzenden" slaagt:
if (mail($to, $subject, $message, implodeHeaders($headers))) {
echo 'succes!';
} else {
echo 'er ging iets mis :(';
}
?>
$name = $_POST['name'];
$from = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$to = '[email protected]'; // @todo dit adres dient correct ingesteld te worden
$headers = array();
$headers['MIME-Version'] = "1.0";
$headers['Content-type'] = "text/plain; charset=iso-8859-1";
$headers['From'] = "{$name} <{$from}>"; // let op: is nu $from ipv $jouw_mail
$headers['Reply-To'] = "{$from}"; // moesten hier wel punthaken staan?
$headers['Subject'] = "{$subject}";
$headers['X-Mailer'] = "PHP/".phpversion();
// for backwards compatibility (PHP < 7.2.0)
function implodeHeaders($in, $linebreak="\r\n") {
$out = '';
foreach ($in as $k => $v) {
// @todo kan ook geen kwaad om hier wat mail header injection controles te doen...
$out .= $k.': '.$v.$linebreak;
}
return $out;
}
// hier controleren we of het "verzenden" slaagt:
if (mail($to, $subject, $message, implodeHeaders($headers))) {
echo 'succes!';
} else {
echo 'er ging iets mis :(';
}
?>
Of wellicht beter, gebruik een library voor het bouwen van mailtjes zoals PHPMailer zodat je al deze problemen niet hebt.
En daarbij is phpMailer ook flexibeler omdat je het kan aansluiten op een andere SMTP-servers of zelfs je Gmail. Plus dat je ook makkelijk kan debuggen via de debug-instelling. Dus je prima te horen krijgen waarom een SMTP-server je mailtje kan weigeren. Uiteraard wil dit alsnog geen bevestiging geven dat de mail daadwerkelijk aankomt, maar het is wel een stap verder in het proces dat wat PHP via mail() bereikt.
Op beeldscherm verschijnt de "succes melding" en de mailtjes komen binnen met de gegevens uit de form.
Nogmaals je dient met meer informatie te komen om je kunnen helpen.
Of zoals Ariën zegt PHPMailer gebruiken.
dit bestand heb ik gevonden en het gedeelte van het form in het java script eruit gehaald. en weer geprobeerd. Ik krijg nu van het formulier de melding succes! op een geheel witte pagina en het bericht komt nu keurig binnen. Dus nu werkt het. Ik weet niet of ik het stukje java hier kan posten omdat het een PHP hulp site is. Maar anders hoor ik dit graag. Sorry voor het ongemak dat ik dit niet eerder heb gezien.
Zou graag het main.js script behouden omdat het ook een dank u melding geeft. Maar er zit iets fout wat zorgt voor het niet versturen van dit form.
gr gertjan
maar wat gaat er nu precies is? je hebt ontdekt dat je formulier (niet het PHP-script) afhankelijk was van de nodige JavaScript. Die heb je nu toegevoegd, dus werkt het toch?
Nee de code van Thomas werkt ook bij mij. in het formulier waar het probleem mee is geeft na het invullen en verzenden een dank berichtje. Dit dank berichtje heb ik gevonden in een bestand wat heet main.js en staat in een js map. In de mail.js heb ik een gedeelte gevonden waarbij staat (form)dit gedeelte heb ik verwijderd. en dan verzend het formulier wel met het script van Thomas en krijg ook mail binnen. Plaats ik het gedeelte form weer in de main.js dan werkt het niet meer hij geeft wel het bedankt voor uw mail, maar krijg dan niets binnen in mijn mail programma. Dus het zit hem in dit stukje script in het bestand main.js.
Ik zal het stukje mee sturen misschien dat iemand zegt dit is fout daarom werkt het niet. nogmaals allen bedankt en ik hoor het wel.
gr gertjan
// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
url: $(this).attr('action'),
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">Dank voor uw bericht. Wij nemen spoedig contact met u op</p>').delay(3000).fadeOut();
});
});
//Pretty Photo
$("a[rel^='prettyPhoto']").prettyPhoto({
social_tools: false
});
//Google Map
var latitude = $('#google-map').data('latitude');
var longitude = $('#google-map').data('longitude');
function initialize_map() {
var myLatlng = new google.maps.LatLng(latitude,longitude);
var mapOptions = {
zoom: 14,
scrollwheel: false,
center: myLatlng
};
var map = new google.maps.Map(document.getElementById('google-map'), mapOptions);
var marker = new google.maps.Marker({
position: myLatlng,
map: map
});
}
google.maps.event.addDomListener(window, 'load', initialize_map);
});
Heb je de jQuery-file wel geladen?
Heb je anders een voorbeeld die we kunnen bekijken?