PHP wachtwoord vergeten email doet het niet.
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).
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.
Gewijzigd op 06/03/2019 17:03:19 door - Ariën -
Maar denkt u dat dit een goed idee of niet is?
Gewijzigd op 06/03/2019 17:07:42 door - Ariën -
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?
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.
Gewijzigd op 06/03/2019 19:03:48 door - Ariën -
Of gewoon zorgen dat de paden goed zijn.
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.
Gewijzigd op 06/03/2019 19:20:43 door - Ariën -
- 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.
Toevoeging op 06/03/2019 21:10:55:
Maar zou dit stukje code ook werken voor PHPMailer? (zonder composer)
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
Gewijzigd op 06/03/2019 21:14:35 door - Ariën -
Moet ik dan phpmail weer verwijderen van mijn server via ssh?
En zoja, hoe doe ik dat dan?
Toevoeging op 06/03/2019 21:17:06:
Jin vanTongeren op 06/03/2019 21:09:25:
Waar moet ik dit dan neerzetten?
Vlak voor de mail wordt verzonden, of juist aan het begin?
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.
Gewijzigd op 06/03/2019 21:34:15 door - Ariën -
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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();
}
?>
$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:
Code (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)?
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.
Gewijzigd op 06/03/2019 21:41:29 door - Ariën -
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 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.
Gewijzigd op 06/03/2019 22:03:23 door - Ariën -
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?
Mogelijk kan je hier wat mee:
https://stackoverflow.com/questions/3477766/phpmailer-smtp-error-could-not-connect-to-smtp-host
Ik weet niet of Versio de DirectAdmin omgeving gebruikt voor de mails. Maar in dat geval gebruik ik poort 587 in mijn PHPmailer instellingen, en connect op mijn eigen mailserver/domein.
Gewijzigd op 07/03/2019 15:06:13 door - Ariën -
Alles doet het nu!
Bedankt voor al uw hulp en bijdrage!
Top! :-)