weer een contactformulier raadsel

Status
Niet open voor verdere reacties.

rob1970

Gebruiker
Lid geworden
14 jan 2012
Berichten
296
Ik had deze website gemaakt voor een klant:

Hier staat op de indexpagina een contactformulier en die werkt prima. Mail komt keurig binnen

Dit is de php code die ik heb gebruikt:
PHP:
<?php
if (!isset($_POST['naam']) || !isset($_POST['email']) || !isset($_POST['message'])) {    echo 'U heeft niet alle velden ingevuld!';    exit;}
$naam = htmlspecialchars($_POST['naam']);$adres = htmlspecialchars($_POST['adres']);$postcodewoonplaats = htmlspecialchars($_POST['postcodewoonplaats']);$email = htmlspecialchars($_POST['email']);$telefoonnummer = htmlspecialchars($_POST['telefoonnummer']);$kenteken = htmlspecialchars($_POST['kenteken']);$message = htmlspecialchars($_POST['message']);

$tijd = time();$datum = strftime('%d/%m/%y %H:%M', $tijd);$ip = getenv('REMOTE_ADDR');$message = $naam.' met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:____________________________________

Naam: '.$naam.'Adres: '.$adres.'Postcode/woonplaats: '.$postcodewoonplaats.'Emailadres: '.$email.'Telefoonnummer: '.$telefoonnummer.'Kenteken: '.$kenteken.'
Bericht: '.$message.'------------------------------------';
mail('een.persoon@example.org', 'Bericht van website', $message, 'From: '.$email);
header('location:https://example.nl/bedankt1.html');?>

Nu wilde deze klant exact dezelfde website maar dan voor een ander product.
Deze staat hier: auto-ontsmetting.nl
(wat hier wel opvalt is dat er twee keer een "//" staat achter index)

Ik heb hier alleen een paar regels weggehaald in het php script omdat hier minder ingevuld moet worden.
Maar voor de rest is zowel het formulier op de html pagina ls het php script hetzelfde.
PHP:
<?php
if (!isset($_POST['naam']) || !isset($_POST['email']) || !isset($_POST['message'])) {    echo 'U heeft niet alle velden ingevuld!';    exit;}
$naam = htmlspecialchars($_POST['naam']);$email = htmlspecialchars($_POST['email']);$telefoonnummer = htmlspecialchars($_POST['telefoonnummer']);$message = htmlspecialchars($_POST['message']);
$tijd = time();$datum = strftime('%d/%m/%y %H:%M', $tijd);$ip = getenv('REMOTE_ADDR');$message = $naam.' met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:____________________________________
Naam: '.$naam.'Emailadres: '.$email.'Telefoonnummer: '.$telefoonnummer.'
Bericht: '.$message.'------------------------------------';
mail('een.persoon@example.org', 'Bericht van website', $message, 'From: '.$email);
header('location:https://example.nl/bedankt.html');?>

Maar nu komt de email niet bij mij binnen.

Ik krijg geen foutmelding of zo maar de mail komt niet binnen. Ook niet in mijn spambox.

Het is mij weer een raadsel.
 
Laatst bewerkt:
De mail() functie van PHP is eigenlijk maar een 'domme mailer'. Het enige wat dit doet is de mail afleveren aan het SMTP-postkantoor zonder te vertellen of het goed gaat of niet goed gaat.
Je kan om de mail()-functie een if-statement plaatsen om te kijken of de mail überhaupt de deur uit komt, maar daar blijft het dan bij. Misschien is die functie wel dichtgetimmerd.
Is het dezelfde hosting of een andere? En heb je al gekeken of die speciale eisen heeft voor wat betreft de mail-verzending?

Code:
<?php
if(mail('jouw@mailadres.nl', 'Bericht van website auto-ontsmetting', $message, 'From: '.$email)) {
   header('location:https://auto-ontsmetting.nl/bedankt.html');
} else {
 echo "Er is wat bij deze website iets mis gegaan met het versturen van de mail";
}
?>

Wat ik aanraad is om PHPmailer te gebruiken.
Deze is wat intelligenter en makkelijker om te buigen naar mailen via SMTP, of de huidige mail-functie.
Deze is ook makkelijker te debuggen in alle stappen die het volgt om de mail bij het SMTP-postkantoor af te leveren.

Nog een opmerking:
Een exit; is niet netjes als iets fout gaat. Als jij op straat loopt en je botst tegen iemand aan, dan excuseer je je toch ook in plaats van meteen weg te lopen?
Dus zorg gewoon voor een nette foutafhandeling. :)
 
Laatst bewerkt:
Ik ben wel eens bezig geweest (erg lang zelfs) met PHP mailer maar kwam er niet uit om dat werkend te krijgen.

Ik gebruik dit script al een tijdje op tenminste 20 websites en dit werkt altijd.

Daarom snap ik niet dat de mail nu niet aankomt.

Het zijn 2 identieke websites met een identiek PHP formulier.
Bij de ene werkt het prima, bij de andere niet.

Beide websites worden gehost bij hostnet. Dus daar kan het ook niet aan liggen.

Het is mij weer een raadsel.
 
Heb je mijn toevoeging al geprobeerd? Het kan zijn dat de functie uit staat, of een false teruggeeft om een andere reden?
Dan weet je in iefer geval al wat meer.

Eigenlijk raad ik altijd phpMailer aan. Die mailt altijd volgens de juiste regeltjes en is makkelijker te volgen tot aan het postkantoor.
 
Laatst bewerkt:
Lijn 28 vervangen.
Je wilt de mail-functie die je nu hebt namelijk uitbreiden.

Let op: Ik heb wel het mailadres in mijn voorbeeld weggehaald. Ik raad aan om dit adres niet zomaar op en bloot op internet te zetten ;)
 
Laatst bewerkt:
Ik heb nu het php script zo staan:
PHP:
<?php
if (!isset($_POST['naam']) || !isset($_POST['email']) || !isset($_POST['message'])) {    echo 'U heeft niet alle velden ingevuld!';    exit;}
$naam = htmlspecialchars($_POST['naam']);$email = htmlspecialchars($_POST['email']);$telefoonnummer = htmlspecialchars($_POST['telefoonnummer']);$message = htmlspecialchars($_POST['message']);
$tijd = time();$datum = strftime('%d/%m/%y %H:%M', $tijd);$ip = getenv('REMOTE_ADDR');$message = $naam.' met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:____________________________________

Naam: '.$naam.'Emailadres: '.$email.'Telefoonnummer: '.$telefoonnummer.'
Bericht: '.$message.'------------------------------------';
if(mail('een.persoon@example.org', 'Bericht van website', $message, 'From: '.$email)) {   header('location:https://example.nl/bedankt.html');} else { echo "Er is wat bij deze website iets mis gegaan met het versturen van de mail";}?>

Als ik het formulier invul en op verzend klik komt dit in beeld (zie screenshot)
De mail komt echter niet binnen.
 

Bijlagen

  • Schermafbeelding 2021-01-10 om 17.30.12.png
    Schermafbeelding 2021-01-10 om 17.30.12.png
    1 MB · Weergaven: 28
Laatst bewerkt door een moderator:
Oke, de functie werkt dus wel.

Ik kan mij indenken dat je mogelijk alleen in je mail-functie als afzender een mailadres mag gebruiken die op die webserver bestaat. Puur om spam door lekke scripts te voorkomen.
Dus gebruik een werkend mailadres van je bijbehorende domein in plaats van @live.nl. Mogelijk werkt dat wel.
 
Laatst bewerkt:
Ik kan mij indenken dat je mogelijk alleen in je mail-functie als afzender een mailadres mag gebruiken die op die webserver bestaat.
Yep, er zijn kleine en grote host providers die dit doen.
 
Ik heb nu als email de email behorende bij de domeinnaam ingevuld.
PHP:
<?php
if (!isset($_POST['naam']) || !isset($_POST['email']) || !isset($_POST['message'])) {    echo 'U heeft niet alle velden ingevuld!';    exit;}
$naam = htmlspecialchars($_POST['naam']);$email = htmlspecialchars($_POST['email']);$telefoonnummer = htmlspecialchars($_POST['telefoonnummer']);$message = htmlspecialchars($_POST['message']);
$tijd = time();$datum = strftime('%d/%m/%y %H:%M', $tijd);$ip = getenv('REMOTE_ADDR');$message = $naam.' met het e-mailadres '.$email.' en het IP '.$ip.' stuurde op '.$datum.' het volgende bericht:____________________________________
Naam: '.$naam.'Emailadres: '.$email.'Telefoonnummer: '.$telefoonnummer.'
Bericht: '.$message.'------------------------------------';
if(mail('een.persoon@example.org', 'Bericht van website', $message, 'From: '.$email)) {   header('location:https://example.nl/bedankt.html');} else { echo "Er is wat bij deze website iets mis gegaan met het versturen van de mail";}?>

Ik heb om zelf te kunnen kijken of de mail aankomt een email forwarder ingesteld naar mijn prive emailadres.
Deze forwarder werkt. (zie screenshot)


Maar ook nu komt de mail weer niet aan.
 
Laatst bewerkt door een moderator:
Dan denk ik dat je beter kan afstappen van mail() en PHPmailer moet gebruiken.
Ik denk dat je blijkbaar op een andere server staat met andere configuratie waardoor het niet werkt.

PS: Ik raad je aan om op dit forum geen mailadressen open en bloot te plaatsen. De kans op spam wordt aanzienlijk groter door geautomatiseerde mailadresverzamelaars (mailharvesters). Iedereen kan hier namelijk meelezen. Dus wijzig al je berichten even als je wilt. Gebruik in het vervolg gewoon fictieve adressen zoals @example.org of iets in die trant.
 
Laatst bewerkt:
Dat gaat dus niet lukken. Al geprobeerd om PHP mailer te gebruiken maar dat is niet gelukt.
 
En waar liep je dan precies op vast? Misschien was je er al wel voor 99 procent? ;)
Het is wel de betere manier van mailen, als je wilt achterhalen wát er fout gaat.
 
Laatst bewerkt:
Ik heb even de websites op een andere server gezet. (heb ze even omgewisseld)

Hier staat nu de website:
Deze wordt gehost bij yourhosting.nl

Nu komt de mail wel binnen.

En de website die op vakgarage stond heb ik even hier gezet:
Het formulier wat eerst op de originele server wel werkte, werkt nu niet meer.

Ik denk dat ik dus even bij hostnet te rade moet gaan.


Het vreemde is wel dat bijvoorbeeld het contactformulier op deze website wel werkt:
Terwijl deze ook gebruik maakt van hetzelfde php script en ook wordt gehost bij hostnet
 
Laatst bewerkt:
Dat kan je doen. Ik zie dat alle drie de sites op een andere server draaien.

Maar PHPmailer inbouwen lijkt mij een beter alternatief.
Waar loop je op vast? Anders geef ik even een stappenplan.
 
Laatst bewerkt:
Ik weet niet meer precies waarop ik vast liep.

Het begon er al mee dat er nergens nederlandse instructies te vinden waren.

Ik wist niet eens hoe ik ermee moest beginnen.
 
Ik weet niet meer precies waarop ik vast liep.

Het begon er al mee dat er nergens nederlandse instructies te vinden waren.

Ik wist niet eens hoe ik ermee moest beginnen.

Nederlands vind je ook bijna nergens. De hele IT-wereld is gewoon Engels. Daar ontkom je niet aan.
Maar ik heb een stappenplan gemaakt. :)

1) Download phpMailer hier, en plaats alle bestanden uit PHPmailer-master in een nieuw aan te maken map phpmailer.
2) Zet dit in een bestand autoload.php in je phpmailer directory":
Code:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';

3) Vervang je regels van je bestaande mailfunctie met dit:

Code:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
require '/phpmailer/autoload.php';

date_default_timezone_set('Etc/UTC');
//Create a new PHPMailer instance
$mail = new PHPMailer();

//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// SMTP::DEBUG_OFF = off (for production use)
// SMTP::DEBUG_CLIENT = client messages
// SMTP::DEBUG_SERVER = client and server messages
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
//Set the hostname of the mail server
$mail->Host = 'mail.example.com';
//Set the SMTP port number - likely to be 25, 465 or 587
$mail->Port = 25;
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication
$mail->Username = 'yourname@example.com';
//Password to use for SMTP authentication
$mail->Password = 'yourpassword';

//Set who the message is to be sent from
$mail->setFrom('pietje@example.org', 'Pietje Puk');
//Set an alternative reply-to address
$mail->addReplyTo('pietje@example.org', 'Pietje Puk');
//Set who the message is to be sent to
$mail->addAddress($email, $naam); 

//Set the subject line
$mail->Subject = 'Onderwerp naam';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML($message);
//Replace the plain text body with one created manually
$mail->AltBody = $message;

//send the message, check for errors
if (!$mail->send()) {
    echo 'Er is een technische fout bij ons opgetreden: ' . $mail->ErrorInfo;
} else {
       header('location:https://auto-ontsmetting.nl/bedankt.html');
}

En gebruik in je configuratie van het script de juiste gegevens voor je SMTP-verbinding en het onderwerp.
 
Laatst bewerkt:
Wil je PHPmailer testen voordat je het in een formulier gaat bouwen?
Probeer dan eerst dit, je zal zien dat het niet moeilijk is.

Bestand config.php invullen en dan mapje mailtest uploaden. Daarna browse je naar mapje mailtest. Dat is alles.

Ik heb in config.php de debug=2 gezet zodat je helemaal kan volgen wat er met je bericht gebeurt. Als je debug=0 zet dan zie je deze informatie niet meer.
 

Bijlagen

  • mailtest.zip
    56,1 KB · Weergaven: 12
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan