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 alle code (behalve de verzend mail) weggehaald, en ben erachter gekomen dat de veiligheid niet goed is. Ik weet niet hoe streng de spam filter van gmail is, maar met mijn eigen mail van @mijndomein.nl, kwam de email wel aan. En bij mijn gmail adres kwam de email niet aan. Maar de rest van de code werkte wel goed. (de validatie werkte, er werden tokens aangemaakt voor het wachtwoord vergeten etc.)
Dus ik ga ervan uit dat de spam filter van microsoft / yahoo / andere mail providers even streng zijn als gmail. (of misschien nog wel strenger)
En via phpmailer wordt de email die dan verzonden wordt, goedgekeurd. (heb ik gelezen op internet).
Het is makkelijker te debuggen dan mail() vooral omdat je dan zelf meer vrijheid in mailservers hebt. En omdat je niet het wiel opnieuw uitvindt met headers.

Maar het is altijd fijn om te weten wat er misgaat met mail(). Bij sommige providers moet je aan bepaalde vereisten voldoen, zoals een bestaand mailadres die je hebt aangemaakt in je From-header.
In de From header heb ik een bestaand email adres. (no-reply adres bestaat echt).
Maar denkt u dat dit een goed idee of niet is?
Ja, maar als het bij Gmail niet aankomt zal het aan een SPF/DKIM record liggen. Informeer eventueel eens bij je hostingprovider.
Ik ben nu bezig met PHPMailer en er zijn (natuurlijk) weer problemen.
PHPMailer heeft een vendor/autoload.php. En die moet ik in het script zetten als een require 'vendor/autoload.php';
Nu krijg ik de opmerking: Warning: require(vendor/autoload.php): failed to open stream: No such file or directory in .....
Waar kan ik dit bestand vinden?
Ik weet dat het iets met composer.json te maken heeft, maar ik heb bijna geen ervaring met composer, noch met .json bestanden.
Ik heb op internet gezocht en daar staat iets vaags over dat het bestand in een composer zit ofzo.
Weet u wat er aan de hand is en hoe ik dit op kan lossen?
Heb je bij Github de zip gedownloadt?

Het handigste is om Composer in je ontwikkelomgeving te installeren. Hiermee kan je in een handomdraai diverse PHP-software downloaden, zoals PHPmailer, Smarty, ZendFramework etc....

Via het configuratiebestand composer.json kan je bepalen wat je allemaal wilt installeren, en zelf nog uitgebreider voor welke versies. Uiteindelijk als je Composer gedownloadt hebt, kan je in je command-line composer install uitvoeren, en dan downloadt hij alle pakketten om die in de vendor map te plaatsen.

Lees ook dit eens:
https://getcomposer.org/doc/00-intro.md#dependency-management

Het zal het programmeren juist makkelijker maken doordat je één distributiesysteem hebt die alles binnenhengelt.
Blijkbaar leveren ze standaard geen autoloader mee....
Dus dan moet je Composer gebruiken, of gewoon handmatig met include() verwijzen naar de juiste classes. Maar het voordeel van een Autoloader is dat je niet een hele waslijst aan classes hoeft te includeren.
- Ariën - op 06/03/2019 18:08:36

Heb je bij Github de zip gedownloadt?


Ja, ik heb de zip gedownload.
Ik heb via ssh access, de composer geïnstalleerd.
Vanuit ssh, heb ik dan weer " composer require PHPMailer/PHPMailer" gedaan, waarna de phpmailer werd geinstalleerd. Maar nu weet ik niet hoe ik bij autoload include kan doen.
Want dan krijg je dus die error message.



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

Maar zou dit stukje code ook werken voor PHPMailer? (zonder composer)
<?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';
?>
Het is geen autoloader, maar het werkt wel.

Maar als je de boel updated, en er is een nieuwe class, dan heb je kans dat de boel 'breekt'. Maar daar moet dan opvallen in het development-proces.

maar volgens mij moet je met composer juist wél een autoloader krijgen als index.php

Reageren