Problem mit PHP Kontaktformular

  • Hey erstmal,
    Und zwar ich habe ein Problem mit PHP Kontaktformular:? Ihr seht das Kontaktformular wen ihr auf der Seite https://defreeg.de/ Runter geht... dann müsste es kommen..


    Kommen wir jetzt mal zum Problem.
    Also es funktioniert alles so wie es soll... aber wen ich jetzt alles ausfülle und dann abschicke dann bekomme ich keine email zum angegebenen emailfach...:cry:

    Das ist der Code

    2 Mal editiert, zuletzt von Arne Drews (3. April 2017 um 13:14) aus folgendem Grund: MOD: Bitte Code hier im Forum posten!

    • Offizieller Beitrag

    Hallo,

    • Bitte relevanten Code hier im Forum posten!
    • Verwende mail() nicht roh!
    • Warum unterdrückst Du pauschal Fehlermeldungen?

    Du scheinst das Script von irgendwo kopiert zu haben.
    Bitte befasse Dich mit den Grundlagen. Du musst ein Script auch verstehen, um es einzusetzen.
    Gerade mit mail() sollte man vorsichtig sein und das nur manuell einsetzen, wenn man weiß was eine RFC ist!

    Um eine Mail deutlich sicherer zu versenden stehen Dir Mailerklassen, wie bspw. PHPMailer oder SwiftMailer ( meine Empfehlung ) zur Verfügung.
    Die kümmern sich für Dich weites gehend um das RFC-Gedöns und andere Aspekte, die beim Mailversand zu bedenken sind.

    Das, was Du da fabrizierst ist SPAM!
    Ich vermute, Du hast das aus einem Beispiel, das HereDoc verwendet? Zumindest spricht die Variablenverwendung innerhalb der Header-Daten stark dafür.
    So wie Du es gerade hast, stimmt am Header der Mail so rein gar nichts.

    Und nebenbei: Du weißt, was das @ macht?

    Gruß Arne

    • Offizieller Beitrag

    Ok Danke,
    Einfach mail() rausnehmen ? Sry bin ziemlich neu...was das thema angeht:-o
    Und nein ich weiß nicht was das @ macht


    Zumindest bist Du ehrlich, das finde ich positiv!

    Das @ unterdrückt Fehlermeldungen!
    Wenn jetzt bspw. $_POST['name'] nicht vorhanden ist, wirft der PHP-Interpreter eine - in diesem Fall - Meldung ( notice ), dass der Index name nicht existiert.
    Das hilft bei Fehlersuche ungemein! Die Chance nimmst Du Dir aber, weil das @ diese Meldung frisst.

    mail() rausnehmen reicht natürlich nicht, Du musst das ersetzen gegen eine Mailerklasse.
    Ich empfehle zwar den SwiftMailer, aber der PHPMailer ist denke ich leichter verständlich, daher solltest Du den nehmen. Ein einfaches Tutorial dazu habe ich im Beitrag #2 ja verlinkt.

    Ein Beispiel:
    Diese Zeile

    PHP
    $headers[] = "From: {$name} <{$from}>";


    kommt vermutlich aus einem Script, das den Header in dieser Art aufbaut:

    PHP
    $headers =<<<EOHTML
    ...
    From: {$name} <{$from}>\r\n
    ... usw.
    EOHTML;


    Dort sind die geschweiften Klammern richtig verwendet.
    Allerdings kannst Du das nicht in eine standardisierte Variablenzuweisung übernehmen.

    Die Zeile müsste richtig lauten:

    PHP
    $headers[] = "From: $name <$from>\r\n";


    Wobei ich zu dieser Schreibweise tendiere:

    PHP
    $headers[] = 'From: ' . $name . ' <' . $from . ">\r\n";


    Aber die sind beide im Prinzip identisch. Was bei Dir allerdings generell fehlt, sind die \r\n, die für einen Zeilenumbruch sorgen.
    Dieser ist bei Mail Header-Angaben bspw. vorgeschrieben! Das tust Du nicht und hast daher schon einen defekten Header, was durchaus als Spam gewertet werden kann.

    Man muss das nicht wissen, genauso weinig wie die Masse an weiteren Konformitäten zu den RFCs, die bei einer Mail beachtet werden müssen.
    Aber gerade darum sollte man sich mit Mailerklassen auseinander setzen, weil diese einem die meiste Arbeit abnehmen.

    Im PHPMailer würde die Zuweisung bspw. so aussehen:

    PHP
    $oMailer->From = $from;
    $oMailer->FromName = $name;


    Um die Konformitäten, die Du in Deiner Roh-Variante bedenken musst, kümmert sich der PHPMailer.

    Gruß Arne


  • Wenn jetzt bspw. $_POST['name'] nicht vorhanden ist, wirft der PHP-Interpreter eine - in diesem Fall - Meldung ( notice ), dass der Index name nicht existiert.


    Unter Umständen. Je nachdem wie das Error-Reporting eingeschaltet ist, passiert eventuell auch garnichts.

    • Offizieller Beitrag
    Zitat

    Unter Umständen. Je nachdem wie das Error-Reporting eingeschaltet ist, passiert eventuell auch garnichts.


    Das ist richtig. Eine Info, dass man das ErrorReporting bspw. so

    PHP
    error_reporting ( -1 );
    ini_set ( 'display_errors', true );


    voll aufdrehen kann, wäre noch hilfreich gewesen.

    Ansonsten berechtigter Hinweis.

    • Offizieller Beitrag

    Tolle Idee... mail() gibt ein bool zurück, was - lass mich raten - true oder false ist.
    Was genau bringt das jetzt dem TE?! Kurze Info, bevor Du antwortest: true bedeutet nicht zwingend, dass die Mail versendet wurde!
    Der Rückgabewert von mail() ist genau genommen komplett unwichtig...