PHP - Mail Funktion

  • Hallo Zusammen!

    ich habe ein kleines Problem:

    ich habe mir online für mein Login- bzw. Registrierungs-Bereich einen kleinen Zusatz besorgt.

    Passwort vergessen

    doch es werden keine emails versendet.

    Ich benutze einen vServer mit Apache2 (nur so als kleine Info!)


    Der Code:

    SQL

    Code
    [COLOR=#C00000 !important][FONT=inherit]ALTER[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#C00000 !important][FONT=inherit]TABLE[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit]`[/FONT][/COLOR][COLOR=#000000][FONT=inherit]users[/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit]`[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#C00000 !important][FONT=inherit]ADD[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit]`[/FONT][/COLOR][COLOR=#000000][FONT=inherit]passwortcode[/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit]`[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#C00000 !important][FONT=inherit]VARCHAR[/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit]([/FONT][/COLOR][COLOR=#009999 !important][FONT=inherit]255[/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit])[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#C00000 !important][FONT=inherit]NULL[/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit];
    [/FONT][/COLOR][COLOR=#C00000 !important][FONT=inherit]ALTER[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#C00000 !important][FONT=inherit]TABLE[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit]`[/FONT][/COLOR][COLOR=#000000][FONT=inherit]users[/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit]`[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#C00000 !important][FONT=inherit]ADD[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit]`[/FONT][/COLOR][COLOR=#000000][FONT=inherit]passwortcode_time[/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit]`[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#C00000 !important][FONT=inherit]TIMESTAMP[/FONT][/COLOR][COLOR=#006FE0 !important][FONT=inherit] [/FONT][/COLOR][COLOR=#C00000 !important][FONT=inherit]NULL[/FONT][/COLOR][COLOR=#333333 !important][FONT=inherit];[/FONT][/COLOR]

    PHP

    PHP
    <?php $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'passwort'); function random_string() { if(function_exists('random_bytes')) { $bytes = random_bytes(16); $str = bin2hex($bytes);  } else if(function_exists('openssl_random_pseudo_bytes')) { $bytes = openssl_random_pseudo_bytes(16); $str = bin2hex($bytes);  } else if(function_exists('mcrypt_create_iv')) { $bytes = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM); $str = bin2hex($bytes);  } else { //Bitte euer_geheim_string durch einen zufälligen String mit >12 Zeichen austauschen $str = md5(uniqid('euer_geheimer_string', true)); }  return $str;}  $showForm = true; if(isset($_GET['send']) ) { if(!isset($_POST['email']) || empty($_POST['email'])) { $error = "<b>Bitte eine E-Mail-Adresse eintragen</b>"; } else { $statement = $pdo->prepare("SELECT * FROM users WHERE email = :email"); $result = $statement->execute(array('email' => $_POST['email'])); $user = $statement->fetch();   if($user === false) { $error = "<b>Kein Benutzer gefunden</b>"; } else { //Überprüfe, ob der User schon einen Passwortcode hat oder ob dieser abgelaufen ist  $passwortcode = random_string(); $statement = $pdo->prepare("UPDATE users SET passwortcode = :passwortcode, passwortcode_time = NOW() WHERE id = :userid"); $result = $statement->execute(array('passwortcode' => sha1($passwortcode), 'userid' => $user['id']));  $empfaenger = $user['email']; $betreff = "Neues Passwort für deinen Account auf www.php-einfach.de"; //Ersetzt hier den Domain-Namen $from = "From: Vorname Nachname <absender@domain.de>"; //Ersetzt hier euren Name und E-Mail-Adresse $url_passwortcode = 'http://localhost/passwortzuruecksetzen.php?userid='.$user['id'].'&code='.$passwortcode; //Setzt hier eure richtige Domain ein $text = 'Hallo '.$user['vorname'].',für deinen Account auf www.php-einfach.de wurde nach einem neuen Passwort gefragt. Um ein neues Passwort zu vergeben, rufe innerhalb der nächsten 24 Stunden die folgende Website auf:'.$url_passwortcode.' Sollte dir dein Passwort wieder eingefallen sein oder hast du dies nicht angefordert, so bitte ignoriere diese E-Mail. Viele Grüße,dein PHP-Einfach.de-Team';  mail($empfaenger, $betreff, $text, $from);  echo "Ein Link um dein Passwort zurückzusetzen wurde an deine E-Mail-Adresse gesendet.";  $showForm = false; } }} if($showForm):?> <h1>Passwort vergessen</h1>Gib hier deine E-Mail-Adresse ein, um ein neues Passwort anzufordern.<br><br> <?phpif(isset($error) && !empty($error)) { echo $error;}?> <form action="?send=1" method="post">E-Mail:<br><input type="email" name="email" value="<?php echo isset($_POST['email']) ? htmlentities($_POST['email']) : ''; ?>"><br><input type="submit" value="Neues Passwort"></form> <?phpendif; //Endif von if($showForm)?>

    Woran kann das liegen?


    ______________________________
    Mit freundlichen Grüßen

    Simuletsplay

  • Dein Code ist nicht vollständig und hat auch, soweit ich lesen kann, nichts mit Mail zu tun.

    Deine Frage:

    Zitat

    Woran kann das liegen?

    Woran kann was liegen?

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • Du hast Mail nirgendwo zu stehen. Wie soll dann eine Mail verschickt werden?

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • wo müsste das denn hier stehen?

    ---------------------------------------------------------------

    3 Mal editiert, zuletzt von Arne Drews (27. August 2018 um 16:51) aus folgendem Grund: MOD: PHP-Tags eingefügt

  • Um eine email verschicken zu können solltest du dir auch die mail() Funktion ankucken.
    Wenn du schon bei php-einfach bist dann nimm auch das Tuturial dazu
    https://www.php-einfach.de/php-tutorial/php-email/

    Wenn du das verstanden hast ,dann bekommst du auch beide Scripte zusammen. Fals nicht dann meld dich nochmal.

    Aber immer dran denken das mail() heute kaum noch so verwendet wird und immer mehr zu swift und form mailer gegenagen wird.
    Soll dich jetzt aber nicht verunsichern.Fals du es nicht hinbekommst sag bescheid.

    EDIT ; Sorry habe gerade gesehen das du ja schon das Tutorial nutzt.
    wenn ich gleich wieder zuhause bin kuck ich mal genauer nach wo der Fehler liegt und sag bescheid.

    Also dein Code wie du ihn gepostet hast versendet eine email. Wenn ich den auf meiner Datenbank anwende kann ich mir ein postwort zuschicken lassen. Bekomme zwar eine Fehlermeldung in line 38 , weiß zwar noch nicht warum das so ist ,aber die email kommt trotzdem an

  • Simuletsplay
    Kannst du diese Buchstabenwüste mal bitte leserlich posten!?

    Den Aufruf von mail() sehe ich, ist die Frage, ob das Script bis dahin kommt, oder die Mail einfach nicht gesendet bzw. empfangen wird, weil die mail()-Funktion benutzt wird, anstatt einer fertigen Mailer-Klasse wz.B. der phpMailer

  • Eigentlich geht sein Script ja. Emails kommen ja an.
    Aber auch nicht richtig.Links aollten klickbar sein und mit den Cods da drinne hatte ich auch probleme beim Rücksetzten.

    Ich habe das mal auf mysqli gemacht und habe es etwas anders gemacht.
    Kann man ja mal testen
    http://sebastian1012.bplaced.net/homepagebasti1…l-versenden.php
    Eigentlich nicht schwer. Ich kann ja mal ein fragen der sich auskennt wenn der sagt das mein Code ok ist gebe ich dir den mal. Da ich Php noch nicht ganz so fit bin sind da noch ein Paar Fehler drinne und sollte vorm benutzen noch kontrolliert werden. Aber wie man sieht funktionieren tut alles

    • Offizieller Beitrag

    Um eine email verschicken zu können solltest du dir auch die mail() Funktion ankucken.


    Bitte gleich auf PHPMailer, SwiftMailer o.ä. verweisen! mail() ist nur für Entwickler geeignet, die fundierte Kenntnisse in den RFCs und Mailservern generell haben, defenitiv aber nicht für Einsteiger zum Lernen!

  • Hallo Nochmals!

    Es tut mir leid, dass ich die Nachricht erst so spät schreibe, aber ich war noch im Urlaub!


    Nun zum Thema:
    ich habe schonmal gehört, dass Apache2 eine Mail-Funktion hat, und man die erst aktivieren muss...

    kann mir da jemand weiterhelfen? Ich habe online schon mal sowas in der art gefunden, aber es hat nicht geholfen....


    ________________________________
    Mit freundlichen grüßen

    Simuletsplay

  • Zitat von Simuletsplay


    ich habe schonmal gehört, dass Apache2 eine Mail-Funktion hat, und man die erst aktivieren muss...


    Nö, hat Apache nicht. PHP hat die. Ist nur nicht ratsam die zu verwenden.

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.


  • ich habe schonmal gehört, dass Apache2 eine Mail-Funktion hat, und man die erst aktivieren muss...

    Sag mal, du bist aber extrem beratungsresistent, oder?


    Den Aufruf von mail() sehe ich, ist die Frage, ob das Script bis dahin kommt, oder die Mail einfach nicht gesendet bzw. empfangen wird, weil die mail()-Funktion benutzt wird, anstatt einer fertigen Mailer-Klasse wz.B. der phpMailer


    Aber immer dran denken das mail() heute kaum noch so verwendet wird und immer mehr zu swift und form mailer gegenagen wird.


    Bitte gleich auf PHPMailer, SwiftMailer o.ä. verweisen!

    Da fragt sich, warum man dir noch antworten soll!!!

  • Hä verstehe ich nicht


    Nicht? Dann suche dir ein anderes Hobby!

    Dir wurde drei mal der Hinweis auf eine Mailer-Klasse gegeben und du willst immer noch mit der mail()-Funktion arbeiten. Mach' was du willst, aber frage nicht in Foren, wenn du die Antworten sowieso ignorieren willst!

  • Hä verstehe ich nicht

    Hatte ich am anfang auch nicht ,aber man muß es ja irgendwie lernen.
    Diese Swift und form Mailer ( Mailer klassen ) ist sowas wie ein Plugin ein bei Javascript ( Der vergleich ist jetzt etwas doof ).
    Aufjedennfall muß man dafür noch was einbinden und den Code etwas abändern,aber das können dir dann die anderen besser erklären.

    Zum rum spielen und probieren kann man mail() vieleicht noch benutzen doch sobald du die funktion auch online stellst und die jeder nutzen kann ,sollte der Code mit den Mailer klassen laufen. Das vereinfacht erstmal einiges und ist für die Sicherheit auch besser. Genauere erklärung gibst von dem anderen ,oder nutze Googel,der kann das besser erklären als ich.

  • Vielen Dank basti1012

    ___________________

    Ich möchte ja jetzt niemanden die Freizeit stehlen, aber es wäre nett, wenn mir einer den PHP-Code fertig machen könnte :knien:...

    Wer keine Zeit und Lust hat, der soll bitte erst gar nicht antworten....


    ___________________________________________
    Mit freundlichen Grüßen

    Simuletsplay