Email-Header ... wie richtig?

Grille

Erfahrenes Mitglied
Hallo ...

Ich benutze zur Zeit diesen Script, um eine Mail automatisch zu versenden:

PHP:
if ($email == ok && $vorname == ok && $nachname == ok){
    echo "<p>Eingabe ist in Ordnung</p>";
    //das Passwort (Bestandteil der Nachricht)
    $passwort = auto_passwort();
    // Verschiedene Zeitabfragen
    $std = date('G');
    $tagderwoche = date('w');
    $wochen_tage = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
    $datum ="Heute haben wir ".$wochen_tage[$tagderwoche]." den ".date('j').".".date('n').".".date('Y')." um ".date('G').":".date('i')." Uhr.";
    // Begrüßung und Abschied
    if ($std >= 5 and $std < 9) { // von 5:00 Uhr bis 8:59 Uhr
        $begruessung = "Guten Morgen $_POST[vorname] $_POST[nachname]";
        $schluss = "einen schönen Tag";
    } elseif ($std >= 9 and $std <= 16) { // von 9:00 Uhr bis 16:59 Uhr
        $begruessung = "Guten Tag $_POST[vorname] $_POST[nachname]";
        $schluss = "einen schönen Tag";
    } elseif ($std >= 16 and $std <= 22) { // von 16:00 Uhr bis 22:59 Uhr
        $begruessung = "Guten Abend $_POST[vorname] $_POST[nachname]";
        $schluss = "einen schönen Abend";
    } else { // von 23:00 Uhr bis 4:59 Uhr
        $begruessung = "Gute Nacht $_POST[vorname] $_POST[nachname]";
        $schluss = "eine gute Nacht";
    }
    $begruessung .= '.';
    /* Empfänger */
    $to  = $_POST[email];
    /* Betreff */
    $subject = "Registrierung";
    /* Nachricht */
    $message = "
        <html>
            <head>
                <title>Registrierung</title>
            </head>
            <body>
                <p>$begruessung</p>
                <p>$datum</p>
                <p>Text Text</p>
                <p>Dein Passwort lautet:<br><strong>$passwort</strong><br><br></p>
                <p>Wir wünschen Dir noch $schluss.</p>
            </body>
        </html>
    ";
    $maildatum = date('d').".".date('m').".".date('Y')." ".date('H').":".date('i');
    /* Header */
    $array = array(
        'From: Accountbetreuung <info@accountbetreuung.de>',
        'To: '.$_POST[email].'',
        'Subject: '.$subject.'',
        'Date: '.$maildatum.'',
        'Reply-To: info@accountbetreuung.de',
        'MIME-Version: 1.0',
        'Content-Type: text/html; charset=iso-8859-1',
        'Content-Transfer-Encoding: 8bit',
        'X-Mailer: PHP'
    );
    $cfg['emailheader'] = implode("\r\n", $array);
    /* Verschicken der Mail */
    mail($to, $subject, $message, $cfg['emailheader']);
}

Ich habe große Probleme mit dem Header:

a) die Zeit
Wenn ich unter "Date: " keine Zeit angebe, so wird mir die Mail nur mit der Uhrzeit versendet.
Wenn ich aber versuche das Datum im Format TT.MM.YYYY SS:MM angebe, scheint das Datum falsch zu sein, weil dann das verschickt wird (01.01.1970 01:00), obwohl die Variable "$maildatum" richtig ist.

b) "TO:"
Das Script bekommt eine Mailadresse übergeben. An diese Adresse soll die Mail verschickt werden.
Wenn ich im HEADER nur das angebe:
PHP:
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
stehten in meiner Email zwei Empfänger: einmal der richtige den ich auch übergeben habe, und dann ein ok@post.webmailer.de

Wenn ich aber im HEADER das mit angebe:
PHP:
'To: '.$_POST[email].'',
stehen in meiner Email wieder zwei Empfänger: zweimal die Mailadresse die ich übergeben habe, dabei möchte ich, dass sie nur einmal erscheint, wie es ja eigentlich auch normal ist.

Könnt ihr mir weiterhelfen?

Gibt es zur Mailfunktion eine ausführliche, deutsche und verständliche Erklärung?

Gruß,
Grille
 
Zu b) dem letzten Problem, schicke die Kontrollmail nicht per To sondern per Bcc dann siehst du an wehn sie ging und er nicht an wehn auch.

und zu a) ich denke nicht das du das deutsche Format da einfach so angeben kannst. Da wird warscheinlich das Englische Format gebraucht. (weis ich aber nicht genau)
 
Das Datum muss im richtigen Format angegeben werden. Grundlage dafür ist RFC 822; in PHP kann dieses Datumsformat wie folgt beschrieben werden:
Code:
D, d M Y H:i:s T
Zu deinem zweiten Punkt: der Empfänger wird bereits durch den ersten Parameter der mail()-Funktion beschrieben. Eine zusätzliche Angabe in Form eines Header-Felds ist deshalb nicht nötig.
 
Danke ...

ein BCC will ich gerade nicht an mich oder andere versenden, ess soll wirklich nur diese eine Mail weggehen, damit das Passwort was ich versenden will nicht in falsche Hände kommt ...

Gumbo .. es stimmt ... einmal "TO:" reicht .. dann steht die adresse auch nur einmal drin. Ich dachte ich hätte es schon einmal so gehabt und es hat nicht funktioniert. :confused:

bei dem Datum: .. bei mir steht jetzt das als Zeit:

$maildatum = date('D, d M Y H:i:s T');

Der schickt mir jetzt aber was von 19 uhr, obwohl es bei mir erst 18 uhr ist ... da muss wohl noch was mit Zeitzonen sein ...

Vielen Dank
 
Das „Date“-Header-Feld kannst du normalerweise auch weglassen, so dass es vom E-Mail-Server ausgefüllt wird.
 
Zurück