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,

Ozzie PHP op 06/03/2019 10:11:58

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;

?>


Ik heb dit geprobeerd.
Maar nu kom ik nog steeds uit op: ?error=invalidrequest.
En welke voorwaarde hangt er aan vast?
Hoe bedoelt u?
Als het om de if() gaat, is dit de voorwaarde:
<?php
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();
}
?>
Hij komt uit op ?error=invalidrequest. En dat stukje code is een andere locatie
Waar zou dat stukje code kunnen zijn?

[size=xsmall]Toevoeging op 06/03/2019 15:57:21:[/size]

Ik zie het al.
Bij de pagina waar de gebruiker een email adres moet invullen voor de wachtwoord herstel, staat dit stukje code bovenaan:

<?php
if(!isset($_GET['request'])) {
if($_GET['request'] !== 'valid') {
header('Location: login.php?error=invalidrequest');
exit();
}
}
?>
Ik heb dit gedaan, zodat het zeker is dat de gebruiker op de knop/link "wachtwoord vergeten" heeft geklikt.
$_GET['request'] is blijkbaar geen 'valid'. Debug die $_GET['request'] eens om te kijken wat er wél inzit.
Ik heb nu die valid werkend gemaakt, dus als er een error is bijvoorbeeld de email is niet verzonden dan is het nu dit:

<?Php
header("Location: ../reset-password.php?error=mailnotsend&request=valid");
exit();
?>
In plaats van dit:

<?Php
header("Location: ../reset-password.php?error=mailnotsend");
exit();
?>
error=mailnotsend&request=valid

Euh. Hoe werkt het bovenstaande dan precies? Er gaat iets fout maar het is goed?

Overigens, het voltooid deelwoord van "verzonden" is sen[color=#ff0000]t[/color].

Creëer eens wat overzicht voor jezelf.

Test het verzenden van een e-mail eens in complete afzondering van alle andere code.

Loop dan nog eens door *alle* code heen vanaf het begin, en plaats hier een *volledig* fragment, beschrijf precies wat je achtereenvolgens doet, en geef aan waar je vastloopt.

Dit is de enige manier waarop we dingen kunnen uitsluiten en naar de oorzaak toe kunnen werken.

Met een halve puzzel krijg je nooit het hele plaatje.
Na even wat zoeken op internet, heb ik besloten PHPMailer te gaan gebruiken.
Ik heb gelezen dat deze library / plugin / extensie alle veilige dingen doet, die moeten worden gedaan.
Zoals dat gedoe in header van de mail() functie.
Ik weet niet of dit een slimme / verstandige keuze is.
Laat me maar weten wat u er van vind.
Als je niet weet wat er misgaat, want ben je dan precies (met phpMailer) aan het oplossen?

Reageren