Hallo,
Ik ben bezig met een systeem waarbij de gebruiker een "wachtwoord vergeten knop" kan aanklikken.
Als je erop klikt, moet de gebruiker zijn / haar email invoeren waar de gebruiker geregistreerd mee staat.
Als de gebruiker de email invoert, moet het een token id aanmaken in een apart MYSQLI tabel.
Ik heb de hele code gevolgd van een tutorial:

https://youtu.be/wUkKCMEYj9M

Ik weet het, het is niet zelf verzonnen, maar ik weet zelf ook niet hoe ik het zelf zou kunnen maken, dus credits naar MMTUTS.
Bij het verzenden van de mail gaat het fout, maar ik weet niet waarom.
Ik heb mijn eigen webhosting server bij Versio.nl en ik heb zelf eerder al een contact formulier gemaakt, die een email kan verzenden. (Het formulier werkt ook).
Het mysqli gedeelte werkt wel. Dus pwdResetEmail, pwdResetSelector, pwdResetToken, pwdResetExpires worden normaal ingevoerd. Alleen de email wordt dus niet verzonden.

Dus ik weet niet wat ik fout heb gedaan.
Dit is mijn (email verzend) code:
<?php
$to = $userEmail;
$subject = 'Wachtwoord jinvantongeren.nl herstellen';
$message = '<p>Er is een verzoek binnengekomen om uw wachtwoord te herstellen. Als u dat niet was, kan u deze e-mail gewoon negeren.</p> <a href="' . $url . '">' . $url . '</a></p>';
$headers = "From: Jin van Tongeren <[email protected]> \r \n Reply-To: [email protected]\r\n Content-type: text/html\r\n";
mail($to, $subject, $message, $headers);
header('Location: ../reset-password.php?reset=success&request=valid');
?>

Van het andere contact formulier dat werkte is dit mijn code:
<?php
$name = $_POST['name'];
$subject = $_POST['subject'];
$mailFrom = $_POST['mail'];
$message = $_POST['message'];
$mailTo = "[email protected]";
$headers = "From: ".$mailFrom;
$txt = "Je hebt een email van je website namens ". $name.".\n\n".$message;
mail($mailTo, $subject, $txt, $headers);
$mailsend = 'De mail is successvol verzonden!';
header('Location: ../contact.php?mailSend');
exit();

?>
Ik heb zelf al geprobeerd een error weer te geven, maar dat gebeurt niet, want er is geen error.
Zelf heb ik ook al in de error log gekeken, maar daar staat ook niets.
Heeft iemand een idee waarom de email niet wordt verzonden?
Alvast bedankt,

Ik heb nu dit:

<?php
$userEmail = $_POST['email'];
$userEmail = filter_var($userEmail, FILTER_VALIDATE_EMAIL);
if(!filter_var($email, FILTER_SANITIZE_EMAIL)) {
header('Location: ../reset-password.php?error=invalidemail');
exit();
}
else {
// de rest van de code ....
}
?>
Ik zou vooral
FILTER_VALIDATE_EMAIL gebruiken om te valideren. Volgens mij is er dan sowieso geen XXS mogelijk, omdat die tekens direct al geweigerd worden. Maar vanwaar lijn 3?
Okey.
Dat heb ik gedaan.
Nu wil ik alleen nog weten waarom de $headers bij de mail() functie niet worden geacccepteerd bij gmail.

Dit is de code van de email validatie:
<?php
$userEmail = $_POST['email'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
header("Location: ../reset-password.php?error=invalidmail");
exit();
}
else {
// rest van de code .....
}
?>

En dit is de code van de mail()
<?php
$to = $userEmail;
$subject = 'Wachtwoord jinvantongeren.nl herstellen';
$message = '<p>Er is een verzoek binnengekomen om uw wachtwoord te herstellen. Als u dat niet was, kan u deze e-mail gewoon negeren.</p> <a href="' . $url . '">' . $url . '</a></p>';
$headers = "From: Jin van Tongeren <[email protected]>\r \n Reply-To: <[email protected]>\r\n Content-type: text/html\r\n";
if(mail($to, $subject, $message, $headers)) {
header('Location: ../reset-password.php?reset=success&request=valid');
exit();
}
else {
header('Location: ../reset-password.php?reset=mailfail');
exit();
}
?>
Er werd al iets over een spatie geroepen in dit topic. Maar het kan geen kwaad om de headers uit het Wiki-artikel die ik noemde te gebruiken.
Probeer zo eens:

<?php

$headers = 'From: Jin van Tongeren <[email protected]>' . PHP_EOL;
$headers .= 'Reply-To: <[email protected]>' . PHP_EOL;
$headers .= 'Content-type: text/html' . PHP_EOL;

?>
Bestaat de from email wel?
Sommige mailservers hebben de verplichting om de email aan te maken, al is t maar zonder mailbox. Bijv. hostnet doet dit ook
Ozzie PHP op 06/03/2019 10:11:58

Probeer zo eens:

Nooit die PHP_EOL gebruiken. Voor mail headers moet het "\r\n" zijn, en PHP_EOL op Linux is "\n" ...
En in sommige gevallen werkt dat prima ... dus even testen of het werkt kan geen kwaad.
Ozzie PHP op 06/03/2019 11:49:00

En in sommige gevallen werkt dat prima ... dus even testen of het werkt kan geen kwaad.

Met Windows hosting gaat dit goed (want PHP_EOL = \r\n) en met mail servers die een beetje "flexibel" zijn (lees: zowel \n als \r\n accepteren). Maar als de mail server een beetje strict is, dan zou ie enkel \r\n moeten accepteren. Wil je dus iets maken dat altijd werkt dan moet je zoveel mogelijk volgens het boekje werken (= \r\n).

Andersom: leuk als het hiermee wel gaat werken, maar dan heb je geen garantie voor de toekomst.

Reageren