• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP Mail Funktion

RGZT

Neues Mitglied
Hallo Forum,

ich bin noch relativ unerfahren in PHP und habe derzeit ein Problem...und zwar:

Ich möchte über PHP eine Mail mit Html Inhalt versenden, allerdings habe ich bereits eine Html Datei (Formular).
Jetzt möchte ich den Inhalt dieser "externen" Datei nur in der Mail angezeigt bekommen und nichts reinschreiben wie in diesem Beispiel:

HTML-E-Mail mit PHP erstellen - PHP-Kurs.com

Die Datei sollte auch nicht als Anhang in der Mail sein. Hoffentlich versteht einer was ich brauche :D
Hier habe ich mal den Anfang von mir, ist aber nicht garantiert richtig:

<?php
$header = "Content-Type:text/html\r\n";
$header .= "From: domänenserver@domäne\r\n"
$empfaenger = [email protected]';
$betreff = 'Test';
$nachricht = 'include formular.html'; <--- wahrscheinlich nicht richtig

mail($empfaenger, $betreff, $header, $nachricht);

?>


Bitte um Hilfe!!
 
Erstmal musst du dabei bedenken, nicht alle Mail-Programme stellen HTML dar, und selbst wenn der User ein Mail-Programm verwendet was HTML kann, dann kann das immer noch aus Sicherheitsgründen deaktiviert sein.
Ich persönlich habe mein Mail-Programm ganz grundsätzlich auf "nur Text" eingestellt, weil ich es überhaupt nicht mag, wenn irgendwelche Spammer mir MB-weise blinkende Banner schicken wollen.

Wenn du das trotzdem noch machen willst, dann mit fopen.

Code:
<?php
$header = "Content-Type: text/html";
$header .= "From: [EMAIL="domänenserver@domäne"]domänenserver@domäne[/EMAIL]";
$empfaenger = "[COLOR=#5c9911][EMAIL="[email protected]"][email protected][/EMAIL]"[/COLOR][COLOR=#3e3e3e];
$betreff = 'Test';

$file = fopen("formular.html");
$nachricht = fread($file,"r");
fclose($file);

mail($empfaenger, $betreff, $header, $nachricht);
 
?>
 [/COLOR]
 
Ich benutzt gern die Weise von einem Kumpel mit 'Nem Buffer :)

PHP:
  <?php

ob_start();

 include( 'deineHTMLdatei.html' );

$msg = ob_get_contents();

while (@ob_end_flush()); // Hier bin ich nicht mehr sicher, könnte auch ein einfaches ob_end_clean sein

$empfaenger = '[email protected]';
$betreff = 'Ein Betreff';
$nachricht = $msg;
$header = 'From: [email protected]' . "\r\n" .
    'Reply-To: [email protected]' . "\r\n" .
    'MIME-Version: 1.0' . "\r\n" .
    'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 


mail($empfaenger, $betreff, $nachricht, $header);
?>

So ist es auf sehr einfache Art und Weise möglich, Dateien von einer anderen Datei zu beziehen und auch "größere" Texte in eine Variable zu stecken. So ist es auch möglich erstmal ob_start zu machen, dann 100 Zeilen HTML Code, dann erst das mit ob_get_contents usw. .. Voll Geil das Zeuch! Merkt dir die Funktion ;)
 
In diesem Fall liegen alle Vorteile bei file_get_contents.

zorndyuke schrieb:
So ist es auch möglich erstmal ob_start zu machen, dann 100 Zeilen HTML Code, dann erst das mit ob_get_contents usw. .. Voll Geil das Zeuch!

Also, Output Buffer sind grundsätzlich eine legitime Technik, sie sind aber definitiv keine Entschuldigung, das EVA-Prinzip erst mal komplett zu ignorieren.

- EVA Prinzip - PHP Forum: phpforum.de

Das hast du zwar nicht explizit gesagt. Aber ich weiß, wie solche Posts gerne gelesen werden.

Es gibt häufig elegantere Lösungen.
 
Meinst du ich hätte erwähnen sollen, dass das Code Beispiel nicht einfach so ohne überlegung kopiert werden soll, sondern mit Köpfchen für sein eigenen Fall umstellen soll, oder was genau ist an der Methode jetzt anzuzweifeln? Also selbstverständlich soll keine Mail einfach so gesendet werden, indem man die "mail.php" aufruft, sondern es muss vorher ein "Befehl" dafür gesendet werden.

Ich denke langsam versteh ich was das sein soll, dann kommt mir die Frage:"Kann man den -ohne- das EVA-Prinzip überhaupt 'Logisch' Programmieren?" - Ich meine, in einem Medienverleih, wird mir ja nicht einfach so ein Artikel angezeigt, ohne das ich auf das Artikel raufgegangen bin.. also erst raufklicken "eingabe -> Ich will das Artikel 4 sehen" | "verarbeitung -> hey datenbank, gib mir alles zur 4 aus." | "ausgabe - aaaalso.. die 4 ist.. ". Alles andere wäre.. oh Gott meine Hände Zittern beim gedanken^^

Naja was auch immer, hier sind zwei Beispiele genannt wie man das Hauptproblem Handlen könnte, sollte ausreichend sein um etwas realisieren zu können.

Gruß
 
zorndyuke schrieb:
Meinst du ich hätte erwähnen sollen, dass das Code Beispiel nicht einfach so ohne überlegung kopiert werden soll, sondern mit Köpfchen für sein eigenen Fall umstellen soll, oder was genau ist an der Methode jetzt anzuzweifeln?

Nein, es kam nur so ein wenig wie das Allheilmittel rüber. Das wollte ich etwas relativieren. War aber vielleicht schon etwas spät gestern.

Output Buffering ist eine nützliche Sache. Es wird auch von großen Frameworks genutzt, um etwa per Include eingebundene Templates in einen String zu bekommen.

Ich weiß nur aus Erfahrung, dass Leute gerne mal auf sowas kommen:

PHP:
<!DOCTYPE html>

<html lang="en">

    <head>
        <meta charset="utf-8" />
        <title>New</title>
    </head>

    <body>

        <h1>Neueste Einträge</h1>

        <?php

        /* Pseudo-Code */

        $query = "SELECT ... FROM articles WHERE ...";

        if ($query === FEHLGESCHLAGEN) {
            /* Hm, hier würde ich jetzt eigentlich gerne auf eine Fehler-
             * seite umleiten, aber dummerweise habe ich schon mit der Ausgabe
             * begonnen, als ich noch fehleranfällige "logische" Verarbeitung
             * gemacht habe, weshalb ich header() nicht mehr nutzen kann.
             */

            header('Location: ...');
            exit;

            /* Jetzt besteht eben möglicherweise die Gefahr, nun einfach
             *
             *   <?php ob_start(); ?>
             *
             * ganz vorne ins Script zu schreiben, um den header-Befehl zu
             * "reparieren". Sinnvoller wäre es aber, alle DB-Abfragen und
             * alles, was mich vielleicht dazu veranlasst, eine ganz andere
             * Seite auszugeben, *vor* dem Beginn der Ausgabe auszuführen und
             * als Ausgabe nur noch ein paar Werte per echo in ein HTML-Template
             * zu setzen.
             *
             * Das macht außerdem den Code viel lesbarer, sorgt für saubere
             * Schichtentrennung usw. usw.
             */
        }

        ?>

    </body>

</html>

Viele Probleme entstehen, weil Ausgabe (wie wird ausgegeben) und Verarbeitung (was tue ich mit Eingaben, was muss ich ausgeben, wie stelle ich die Daten zusammen) wild gemixt werden.
 
Achso jetzt verstehe ich dich. Ja da hast du Recht, den Fehler habe ich damals auch getan, z.B. Weiterleitungen mitten im Code Wild durcheinander durch die Header Funktion zu verwenden. Aber man lernt ja immer dazu ^^
 
Zurück
Oben