Passwort per eMail an Nicht-registrierte User versendenForum » Webzone » PHP & MySQL » Passwort per eMail an Nicht-registrierte User versenden
-
25.03.2012 um 00:26 Uhr
Hallo Forum,
ich habe mir mal die Tutorialwnsche durchgesehen und von einem User wurde gewnscht, dass sich ein nicht-registrierter User ein sicheres Passwort per eMail zusenden lassen kann. Da ich heute etwas Zeit hatte, habe ich mal eine solche Funktion geschrieben. Der Code ist gut dokumentiert und sollte eigentlich selbsterklrend sein. Bei Bedarf bau ich noch ein einfaches Captcha mit ein als Spamschutz.
send_password.php
<?php /** * Dies ist ein Beispiel, wie man einfach ein per Zufall generiertes * Passwort an eine eMail-Adresse versenden kann, ohne dass ein User * registriert sein muss! * * Version 1.0 ohne Captcha * * (c) by Aridian fr Alice-Grafixx.de * * Dieser Code ist Freeware und darf beliebig eingesetzt werden */ // Das Script erst ausfhren, wenn auch wirklich auf submit geklickt wurde if(isset($_POST['submit'])){ $email = $_POST['email']; // Die eMail-Adresse, an die das Passwort versendet werden soll if(empty($_POST['email'])){ // Fehlermeldung ausgeben wenn keine eMail-Adresse eingegeben wurde echo '<font color=#DF0000>Es wurde keine eMail-Adresse angegeben!</font><br /><br />'; }else{ // Wir berprfen die eMail-Adresse auf ihre Gltigkeit if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $_POST['email'])) { echo '<font color=#DF0000>Ungültige eMail-Adresse!</font><br /><br />'; }else{ // Wir erstellen das Passwort mittels einer Funktion function pw_erstellen() { $zeichen = "abcdefghijkmnopqrstuvwxyz023456789ABCDEFGHJKLMNPQRSTUVWXYZ*~-?/\%"; srand((double)microtime()*1000000); $i = 0; $pass = '' ; // Das Passwort sollte schon sicher sein und deshalb erstellen wir ein 10 Zeichen langes Passwort while ($i <= 9) { $num = rand() % 65; $tmp = substr($zeichen, $num, 1); $pass = $pass . $tmp; $i++; } return $pass; } $passwort = pw_erstellen(); // Jetzt versenden wir das Passwort an die eingegebene eMail-Adresse $sender = "deine@email.de"; // Hier sollte natrlich Deine eMail-Adresse oder die Deines Dienstes stehen $empfaenger = "$email"; // Die eMail-Adresse, die der User eingegeben hat. Hierhin wird das Passwort geschickt $betreff = "Ihr angefordertes Passwort"; // Der Betreff. Den kann man beliebig ndern $mailtext = "Hallo!\n\nIhr angefordertes Passwort lautet: $passwort"; // Und das, was in der eMail dann als Text steht einschlielich unseres erstellten Passwortes mail($empfaenger, $betreff, $mailtext, "From: $sender "); // Mit dieser Funktion wird die eMail dann zusammengesetzt und abschlieend versendet // Jetzt geben wir eine entsprechende Erfolgsmeldung aus echo '<font color=#007F00>Das Passwort wurde erfolgreich an Ihre eMail-Adresse versendet</font><br /><br />'; } } } echo ' <b>Passwort zusenden</b> <br /><br /> <form action="" method="POST" /> <input type="text" name="email" size="30" maxlenght="45" /> <br /> <input value="Passwort jetzt zusenden" type="submit" name="submit" /> </form> '; ?>
Der Beitrag wurde insgesamt 2 mal editiert, zuletzt 25.03.2012 um 01:30 Uhr ...>>Die Wahrheit wird nur zu oft, wie man sagt, verdunkelt, aber sie erlischt nie.<<
Livius -
25.03.2012 um 01:28 Uhr
Um die Sache etwas sicherer zu machen, habe ich nun einen Spamschutz von www.stoppt-den-spam.info eingebaut. Dabei handelt es sich um einen Rechen-Captcha.
send_password.php
<?php /** * Dies ist ein Beispiel, wie man einfach ein per Zufall generiertes * Passwort an eine eMail-Adresse versenden kann, ohne dass ein User * registriert sein muss! * * Version 1.1 mit einem Rechencaptcha von www.stoppt-den-spam.info * * (c) by Aridian fr Alice-Grafixx.de * * Dieser Code ist Freeware und darf beliebig eingesetzt werden */ // Wir starten die Session fr das Captcha von www.stoppt-den-spam.info session_start(); function encrypt($string, $key) { $result = ''; for($i=0; $i<strlen($string); $i++) { $char = substr($string, $i, 1); $keychar = substr($key, ($i % strlen($key))-1, 1); $char = chr(ord($char)+ord($keychar)); $result. = $char; } return base64_encode($result); } $sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "29jfkd921"); // Diesen Code sollte man im rechen-captcha.php Script und hier anpassen. Es mssen aber beide Codes identisch sein $sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe); if(isset($_SESSION['rechen_captcha_spam']) AND $sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){ unset($_SESSION['rechen_captcha_spam']); // Das Script erst ausfhren, wenn auch wirklich auf submit geklickt wurde if(isset($_POST['submit'])){ $email = $_POST['email']; // Die eMail-Adresse, an die das Passwort versendet werden soll if(empty($_POST['email'])){ // Fehlermeldung ausgeben wenn keine eMail-Adresse eingegeben wurde echo '<font color=#DF0000>Es wurde keine eMail-Adresse angegeben!</font><br /><br />'; }else{ // Wir berprfen die eMail-Adresse auf ihre Gltigkeit if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$", $_POST['email'])) { echo '<font color=#DF0000>Ungültige eMail-Adresse!</font><br /><br />'; }else{ // Wir erstellen das Passwort mittels einer Funktion function pw_erstellen() { $zeichen = "abcdefghijkmnopqrstuvwxyz023456789ABCDEFGHJKLMNPQRSTUVWXYZ*~-?/\%"; srand((double)microtime()*1000000); $i = 0; $pass = '' ; // Das Passwort sollte schon sicher sein und deshalb erstellen wir ein 10 Zeichen langes Passwort while ($i <= 9) { $num = rand() % 65; $tmp = substr($zeichen, $num, 1); $pass = $pass . $tmp; $i++; } return $pass; } $passwort = pw_erstellen(); // Jetzt versenden wir das Passwort an die eingegebene eMail-Adresse $sender = "deine@email.de"; // Hier sollte natrlich Deine eMail-Adresse oder die Deines Dienstes stehen $empfaenger = "$email"; // Die eMail-Adresse, die der User eingegeben hat. Hierhin wird das Passwort geschickt $betreff = "Ihr angefordertes Passwort"; // Der Betreff. Den kann man beliebig ndern $mailtext = "Hallo!\n\nIhr angefordertes Passwort lautet: $passwort"; // Und das, was in der eMail dann als Text steht einschlielich unseres erstellten Passwortes mail($empfaenger, $betreff, $mailtext, "From: $sender "); // Mit dieser Funktion wird die eMail dann zusammengesetzt und abschlieend versendet // Jetzt geben wir eine entsprechende Erfolgsmeldung aus echo '<font color=#007F00>Das Passwort wurde erfolgreich an Ihre eMail-Adresse versendet</font><br /><br />'; } } } } echo ' <b>Passwort zusenden</b> <br /><br /> <form action="" method="POST" /> <input type="text" name="email" size="30" maxlenght="45" /> <br /><br /> <img src="rechen-captcha.php"> <input type="text" name="sicherheitscode" size="5"> <br /><br /> <input value="Passwort jetzt zusenden" type="submit" name="submit" /> </form> '; ?>
rechen-captcha.php
<?php session_start(); unset($_SESSION['rechen_captcha_spam']); $zahl1 = rand(10,20); //Erste Zahl 10-20 $zahl2 = rand(1,10); //Zweite Zahl 1-10 $operator = rand(1,2); // + oder - if($operator == "1"){ $operatorzeichen = " + "; $ergebnis = $zahl1 + $zahl2; }else{ $operatorzeichen = " - "; $ergebnis = $zahl1 - $zahl2; } function encrypt($string, $key) { $result = ''; for($i=0; $i<strlen($string); $i++) { $char = substr($string, $i, 1); $keychar = substr($key, ($i % strlen($key))-1, 1); $char = chr(ord($char)+ord($keychar)); $result.=$char; } return base64_encode($result); } $_SESSION['rechen_captcha_spam'] = encrypt($ergebnis, "29jfkd921"); // Diesen Code sollte man im send_password.php Script und hier anpassen. Es mssen aber beide Codes identisch sein $_SESSION['rechen_captcha_spam'] = str_replace("=", "", $_SESSION['rechen_captcha_spam']); $rechnung = $zahl1.$operatorzeichen.$zahl2." = ?"; $img = imagecreatetruecolor(80,15); $schriftfarbe = imagecolorallocate($img,13,28,91); $hintergrund = imagecolorallocate($img,162,162,162); imagefill($img,0,0,$hintergrund); imagestring($img, 3, 2, 0, $rechnung, $schriftfarbe); header("Content-type: image/png"); imagepng($img); imagedestroy($img); ?>
Beide Dateien mssen sich im selben Verzeichnis befinden.
Gru Aridian
Der Beitrag wurde insgesamt 3 mal editiert, zuletzt 25.03.2012 um 01:39 Uhr ...>>Die Wahrheit wird nur zu oft, wie man sagt, verdunkelt, aber sie erlischt nie.<<
Livius -
25.03.2012 um 17:15 Uhr
Hi Adrian,
ist echt beeindruckend, dass du dir so viel Arbeit gemacht hast!
Wenn du magst, kannst du dein Tutorial auch unter deinem Benutzernamen hochladen: alice-grafixx.de/submit_tutorial!
Es erscheint dann bei den anderen PHP/MySQL-Tutorials und wre somit spter leichter zu finden!
lg
-Name- -
25.03.2012 um 18:35 Uhr
Servus -Name-,
naja, soviel Arbeit war das gar nicht. Ich bin dann eher so ein Mensch, der alles am besten perfekt machen will und lieber eine Funktion zuviel als zuwenig einbaut und dann ziehen sich die Scripte in die Lnge, denn dann wird man nie fertig, weil man es immer noch ein wenig besser machen kann und will
Ich werde die Tutorials mal hochladen. Ist vielleicht wirklich besser und bersichtlicher dann.
Gru Aridian>>Die Wahrheit wird nur zu oft, wie man sagt, verdunkelt, aber sie erlischt nie.<<
Livius