anon
anon

Reputation:

Allow german Umlauts in php mail?

I use this code to send a email via a contact form:

<?php

    /* Geben Sie hier Ihre E-Mail Adresse zwischen den beiden " an: */

    $_emails[0] = "[email protected]";

    // Wenn keine $_POST Daten übermittelt wurden, dann abbrechen
    if(!isset($_POST) OR empty($_POST))
    {
       header("Content-type: text/plain; charset=utf-8");
        echo "Es wurden keine Daten übermittelt!";
        exit;
    }
    else
    {
        // Datum, Uhrzeit und Pfad zum eigenen Script feststellen
        $date = date("d.m.Y");
        $time = date("H:i");
        $host = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];

        // Empfänger feststellen und auf Gültigkeit prüfen
        if(isset($_POST['recipient']) AND isset($_emails[ $_POST['recipient'] ])
           AND preg_match("/^.*@.*\..*$/", $_emails[ $_POST['recipient'] ]))
        {
            $recipient = $_emails[ $_POST['recipient'] ];
        }
        // Wurde kein (gültiger) Empfänger angegeben, es mit $_email[0] versuchen
        elseif(isset($_emails[0]) AND preg_match("/^.*@.*\..*$/", $_emails[0]))
        {
            $recipient = $_emails[0];
        }
        // Ist auch diese Adresse ungültig, mit Fehlermeldung abbrechen
        else
        {
            header("Content-type: text/plain");
            echo "Fehler im Script - es wurde kein Empfänger oder eine ungültige E-Mail Adresse in \ angegeben.";
            exit;
        }

        // Wenn Betreff übermittelt, diesen verwenden
        if(isset($_POST['subject']))
        {
            $subject = $_POST['subject'];
        }
        // sonst einen Default Betreff verwenden
        else
        {
            $subject = "Formular Daten von {$_SERVER['HTTP_HOST']}";
        }

        // E-Mai Kopf generieren
        $email = "Formular Eintrag\n"
               . "\n"
               . "Am $date um $time Uhr hast das Script auf $host Formulardaten empfangen,\n"
               . "welche nach Angabe des Browsers von {$_SERVER['HTTP_REFERER']} stammen.\n"
               . "\n"
               . "Der Formular Inhalt wird nachfolgend wiedergegeben.\n"
               . "\n";

        // Alle $_POST Werte an den E-Mail Kopf anhängen
        foreach($_POST as $key => $value)
        {
            if($key == "redirect" OR $key == "recipient" OR $key == "subject")
            {
                continue;
            }
            $email .= "Fomular Feld '$key':\n"
                   .  "=============================\n"
                   .  "$value\n"
                   .  "\n";
        }

        // E-Mail Fuß anfügen
        $email .= "=============================\n"
               .  "Ende der automatisch generierten E-Mail.";

    $email = htmlentities($email, ENT_QUOTES, 'uft-8');

        // Versuchen E-Mail zu versenden
        if(!mail($recipient, $subject, $email))
        {
            // Ist dies gescheitert, Fehlermeldung ausgeben
            echo "Es ist ein Fehler beim Versenden der E-Mail aufgetreten,"
                 . " eventuell liegt ein Konfigurationsfehler am Server vor.\n\n";
            exit;
        }

        // Wenn gewünscht, auf Bestätigungsseite weiterleiten
        if(isset($_POST['redirect']) AND preg_match("=^(http|ftp)://.*\..*$=", $_POST['redirect']))
        {
           header("Location: ".$_POST['redirect']);
            exit;
        }
        // sonst eine Bestätigung ausgeben
        else
        {
            header("Content-type: text/html");
            echo "Die E-Mail wurde erfolgreich versendet.";
        echo '<br>';
          echo '<a href="http://foto.roser.li/admin/index.php?page=kontakt">Zurueck</a>';
            exit;
        }
    }

    ?>

But now I have the problem that specific german vowels like for example ä, ö, ü or ß aren't displayed correctly in the mail I recieve. How can I change that?

==EDIT==

Here an example:

ö ö

üß Ã¼ÃŸ

ß ÃŸ

Upvotes: 4

Views: 8642

Answers (3)

Hafenkranich
Hafenkranich

Reputation: 1744

Using a library like swiftmailer simplifies the whole thing a lot.

Upvotes: 0

oezi
oezi

Reputation: 51797

try to set an utf-8 header for your mail like this (just add it as 4th parameter to mail()):

$header = "MIME-Version: 1.0\r\nContent-type: text/plain; charset=UTF-8\r\n"; 

Upvotes: 1

shamittomar
shamittomar

Reputation: 46692

You need to send Content Type: UTF-8 header in email too like this:

mail($recipient, $subject, $email,
    'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n");

Upvotes: 9

Related Questions