PHPMailer und Umlaute

  • Hallo Gemeinde,


    ich habe ein WEB-Formular erstellt, welches eine Nachricht über PHPMailer versendet, dies funktioniert nun auch soweit recht gut.

    Problematisch wird es, wenn im eingegebenen Text Sonderzeichen wie äöüÄÖÜß vorkommen, diese werden dann


    Original Nachricht im WEB-Formular

    Code
    Gruß Ich
    ä
    ö
    ü


    So sieht es in der Mail dann aus

    Code
    Gruß Ich ä ö ü

    Auch habe ich noch ein Problem damit, das die Zeilenumbrüche nicht übertragen werden, sondern durch ein Leerzeichen ersetzt werden.


    Das ist der komplette PHPMailer-Code.


    und dies der Haeder aus dem Kontaktformular


    HTML
    <!DOCTYPE html>
    <html lang="de">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="styles.css">
        <title>Werkstatt</title>
     </head>


    Ich hoffe hier alle Informationen zur Verfügung gestellt zu haben.

    Was mache ich falsch?


    Danke für die Unterstützung.

  • Du kannst das ganze 'utf8_encode' entfernen.


    Füge stattdessen folgendes hinzu: (Irgendwo vor dem '$mail->send();')

    Code
    $mail->CharSet = 'UTF-8';

    Matrix: @nan0:nan0.dev - IRC: nan0 on hackint.org - Discord? Nein danke!

    Einmal editiert, zuletzt von nan0 ()

    Gefällt mir 1
  • Was hast du mit den ganzen htmlspecialchars() vor? Das ergibt bei einer Mail wenig Sinn, vor allem wenn dann eine HTML-Mail ohne HTML generiert wird.

    Das war in einem Beispiel enthalten, in der Zwischenzeit werden die Mails aber auch als HTML versendet.

    Kann ich dies wirklich löschen?

  • htmlspecialchars ist nur dann sinnvoll, wenn die Variablen in HTML-Code ausgegeben werden. Beim Absender und beim Betreff ist das Quatsch. Bei der Nachricht kommt es drauf an.


    Wenn du ein richtiges Formular bauen willst, denke auch an die Validierung der Eingaben, insbesondere der E-Mail-Adresse.

  • Wenn du ein richtiges Formular bauen willst, denke auch an die Validierung der Eingaben, insbesondere der E-Mail-Adresse.

    Ich bin davon ausgegangen, dass mir dies der PHPMailer abnimmt bzw. in contact Formular die Zeile

    Code
    <input name="besucher_email" type="email" class="form-control" id="InputEmail" aria-describedby="emailHelp" required>ä

    , ist dies nicht so?

    Meine Versuche mehrere Mailadressen in das Mail Adressfeld einzugehen sind gescheitert.

    Außerdem habe ich ein Captcha eingebunden, was eine maschinelle Nutzung erschweren dürfte.

  • Du solltest dich da nicht täuschen lassen dadurch, dass die aktuellen Browser die Eingaben anhand des Input Typs überprüfen. Wenn ein Browser das nicht tut, dann wird eben übertragen was der User in das Inputfeld reingeschrieben hat, egal ob das eine legale E-Mail-Adresse ist oder ein Schadcode. Und natürlich hat ein Hacker Tools, die das Formular ausfüllen und abschicken ohne die Überprüfung des HTML5 Input Typs. Du musst also bei der Auswertung trotzdem darauf achten, dass der übertragene String auch das ist was du haben willst und nicht irgendein Schadcode, den du dann der nächstbesten Funktion als E-Mail-Adresse übergibst. Wenn PHPMailer gut programmiert ist, sollte da aber auch nochmal eine Überprüfung der Parameter passieren.

  • wird dies im contact Formular geprüft oder in der PHPMailer oder in beiden?

    Was muss wo hinein um es abzusichern, gibt es Beispiele hierzu?

    Nur als Hinweis, die Seite ist noch nicht öffentlich zugänglich zur Zeit nur mit Zugangsdaten so das ich in Ruhe probieren und testen kann:-)