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,

Oke.
Moet ik dan phpmail weer verwijderen van mijn server via ssh?
En zoja, hoe doe ik dat dan?

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

Jin vanTongeren op 06/03/2019 21:09:25

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'path/to/PHPMailer/src/Exception.php';
require 'path/to/PHPMailer/src/PHPMailer.php';
require 'path/to/PHPMailer/src/SMTP.php';
?>


Waar moet ik dit dan neerzetten?
Vlak voor de mail wordt verzonden, of juist aan het begin?
Ik zeg niks over verwijderen hoor, maar met rm -rf phpmailer kan je een directory verwijderen. Je kan ook de 'f' weghalen, zodat je een bevestiging moet geven. Die 'r' is een parameter die het recursief uitvoert.
Anyway, op Google kan je genoeg vinden over Linux commando's. En met man functienaam kan je de manual van een functie lezen.

Maar ik neem aan dat je bekend bent met PHP? Dan is het logisch dat je classes of autoloaders altijd vooral inlaadt. Voordat je mailt maak je ook wat methods aan met instellingen, zoals de From, de Subject, de Body etc...
En ook daarbij moet je de classe al kenbaar hebben gemaakt.
Ik ben bekend met de procedural style van PHP. Niet met PDO / OOP.
Ik heb wel gehoord over "classes" en de OOP style, maar heb me er nooit echt in verdiept.
Maar goed. Zegt u maar of het leren van PDO / OOP het waard is.
Ik heb de code nu iets veranderd:
<?php
$mail = new PHPMailer(true);
try {
$mail->SMTPDebug = 2;
$mail->isSMTP(); // Set mailer to use SMTP
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Host = 'mail.axc.nl'; // Specify main and backup SMTP servers
$mail->Port = 465; // TCP port to connect to
$mail->isHTML(true); // Set email format to HTML
$mail->Username = '[email protected]'; // SMTP username
$mail->Password = 'mijn wachtwoord'; // SMTP password
//Recipients
$mail->setFrom('[email protected]');
$mail->addAddress($userEmail); // Add a recipient
$mail->addReplyTo('[email protected]');
//Content
$mail->Subject = 'Wachtwoord jinvantongeren.nl herstellen';
$mail->Body = "<p>Er is een verzoek binnengekomen om uw wachtwoord te herstellen. Als u dat niet was, kan u deze e-mail gewoon negeren.</p> <br>
De link is: <br> <a href='".$url."'>".$url."</a><br>Met vriendelijke groeten, <br> Jin van Tongeren";
$mail->AltBody = 'Er is een verzoek binnengekomen om uw wachtwoord te herstellen. Als u dat niet was, kan u deze e-mail gewoon negeren. \r\n. De link is: \r\n '.$url.' \r\n Met vriendelijke groeten, \r\n Jin van Tongeren ';
header('Location: ../reset-password.php?reset=success&request=valid');
exit();
}
catch (Exception $e) {
header('Location: ../reset-password.php?reset=mailfail&request=valid');
exit();
}
?>
En op het begin van dit script heb ik dit neergezet:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer-master/src/Exception.php';
require 'PHPMailer-master/src/PHPMailer.php';
require 'PHPMailer-master/src/SMTP.php';
?>

Nu krijg ik te zien dat de email is verzonden (hier kom ik uit: reset=success&request=valid), maar ik krijg niets binnen. Moet ik nu de servers van gmail gebruiken, of de servers van mijn provider (versio)?
Je stuurt niks...
Waar is je $mail->send() (die true/false terug geeft)?
Nu maak je alleen maar wat waardes aan, waar je uiteindelijk nog niks mee doet.
Ik heb nu na de $mail->Altbody, $mail->send() neergezet.
Nu moet ik 1 á 2 minuten wachten en na het wachten wordt ik omgeleid naar: ?reset=mailfail&request=valid.
Hoe kan dit?
Of is het uiteindelijk toch een beter idee om of de php mail() functie te gebruiken of een andere library, (Zend bijvoorbeeld) te gebruiken?
Want dit schiet ook niet echt op...
Als je zolang moet wachten is er toch een trage mailserver op het pad.
Als je nou even geen headers gebruikt, dan zou je een debug-bericht moeten zien.

Eigenlijk raad ik om deze reden geen redirect headers aan. Je kan prima in hetzelfde bestand aangeven of iets gelukt is, en ook met een reden erbij.
Ik heb nu de redirect header weggehaald en een echo error_get_last() neergezet.
Ik krijg nu deze errors:
2019-03-07 13:35:32 SERVER -> CLIENT:
2019-03-07 13:35:32 SMTP NOTICE: EOF caught while checking if connected
SMTP Error: Could not connect to SMTP host.
SMTP Error: Could not connect to SMTP host.

Ik gebruik de versio mailserver wat volgens de website van versio is: mail.axc.nl met als port 465. (https://www.versio.nl/artikelen/31-wat-zijn-de-pop-imap-en-smtp-gegevens-van-mijn-email-account)
Maar blijkbaar doet dit het dus niet. Heeft u enig idee?
Ja oké.
Alles doet het nu!
Bedankt voor al uw hulp en bijdrage!

Reageren