Roland: email Content-Type für HTML & Plain-Text

Hallo!

Normallerweise hab ich bei Content-Type: Text stehn und es wird ne Plaintext-email versendet. Aber z.B. im Thunderbird hat man ja beim sendes des email die Varianten "Nur Text","Nur HTML" und "HTML & Text". Wie kann ich denn "HTML & Text" mit PHP mail() versenden?

Danke
Roland

  1. Moin!

    Normallerweise hab ich bei Content-Type: Text stehn und es wird ne Plaintext-email versendet. Aber z.B. im Thunderbird hat man ja beim sendes des email die Varianten "Nur Text","Nur HTML" und "HTML & Text". Wie kann ich denn "HTML & Text" mit PHP mail() versenden?

    Das wird komplexer, weil du eine Mime-Multipart-Message erzeugst, die als multipart/alternate gekennzeichnet wird und dann jeweils einen Teil text/plain und text/html besitzt.

    Eingebettete Bilder im HTML-Teil sorgen vermutlich dafür, dass dieser Teil sich zu einem weiteren Multipart-Teil (multipart/mixed) wandelt. Ebenso sind Attachments nochmal eine Story für sich. Insgesamt verschachtelt sich die ganze Mail ziemlich. Siehe u.a. auch http://forum.de.selfhtml.org/archiv/2007/1/t143348/ als Beispiel.

    Es ist empfehlenswert, das Mailgenerieren einfach einer Bibliothek zu überlassen. Beispielsweise das Paket Mail_Mime von PHPs PEAR. Siehe http://pear.php.net/manual/en/package.mail.mail-mime.example.php für ein Beispiel.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hi!

      Den Code hab ich jetzt zam, aber welche Packete muss ich denn da alle installieren bzw. in welcher Struktur?

      Ich hab das Pear, Mail und Mail_Mine heruntergeladen, aber wenn ich die alle in den selben Ordner kopieren funktioniert es nicht, wie gehören die angeordnet?

      Danke
      Roland

      1. Moin!

        Den Code hab ich jetzt zam, aber welche Packete muss ich denn da alle installieren bzw. in welcher Struktur?

        Ich hab das Pear, Mail und Mail_Mine heruntergeladen, aber wenn ich die alle in den selben Ordner kopieren funktioniert es nicht, wie gehören die angeordnet?

        PEAR wird mit PHP eigentlich schon sehr lange direkt mitgeliefert. Es wird in der Regel ausreichen, ohne Downloads und Includes erst einmal direkt die "nackten" Includes in den eigenen Code einzubauen, die z.B. am Beispielanfang zu finden sind.

        Wenn das nicht klappt, ist der include-Pfad nicht korrekt angepaßt - ein Fehler, der leicht zu korrigieren ist, wenn man die Lage der PEAR-Dateien kennt.

        Ansonsten ist es ein wenig Gefummel, aus den Includes sowie den in den PEAR-Skripten wiederum enthaltenen Includes die richtige Struktur herzustellen.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Hi!

          mit phpinfo() hab ich erfahren, wo es liegt: '--with-pear=/usr/share/pear'

          aber ich erhalte dann folgenden Fehler, was kann ich denn da machen?
          Warning: require_once() [function.require-once]: open_basedir restriction in effect. File(/usr/share/pear/Mail.php) is not within the allowed path(s): (/[link zur php-datei]) on line 3

          danke
          Roland

          1. Moin!

            mit phpinfo() hab ich erfahren, wo es liegt: '--with-pear=/usr/share/pear'

            Das ist gut.

            Bleibt nur noch die Frage, was dein include_path so sagt.

            Wenn dieser Pfad darin enthalten ist, wäre die Frage, wie der Befehl aussieht, der diesen Fehler verursacht:

            Warning: require_once() [function.require-once]: open_basedir restriction in effect. File(/usr/share/pear/Mail.php) is not within the allowed path(s): (/[link zur php-datei]) on line 3

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
            1. bei phpinfo() steht bei include_path ".:" sowohl, local, als auch bei Master.

              Was wüsste ich denn da ändern bzw. wie?

              Stimmen die requries so?
              require_once('/usr/share/pear/Mail.php');
              require_once('/usr/share/pear/mime.php');

              Vielen Dank!
              Roland

              1. meinte natürlich müsste, also "Was müsste ich denn da ändern bzw. wie?"

                danke
                Roland

              2. Moin!

                bei phpinfo() steht bei include_path ".:" sowohl, local, als auch bei Master.

                Was wüsste ich denn da ändern bzw. wie?

                Stimmen die requries so?
                require_once('/usr/share/pear/Mail.php');
                require_once('/usr/share/pear/mime.php');

                Ok, dein Hoster bietet leider keine Möglichkeit für dich, die zentrale PEAR-Installation einzubinden. Der include_path listet nur das aktuelle Verzeichnis als Suchbasis (das ist das gewohnte Verhalten von include/require), und das includen von Dateien außerhalb deines Webspaces ist aus Sicherheitsgründen unterbunden.

                Dann bist du leider doch auf manuelle Installation angewiesen.

                Mail_mime läßt sich einzeln nutzen. Das von mir verlinkte Beispiel fragt am Ende den Body und die Header ab und ruft damit dann separat die Klasse Mail auf. An der Stelle kannst du auch direkt die PHP-Funktion mail() aufrufen.

                Das einzige, was dir passieren kann, ist die Abhängigkeit noch von einer zentralen PEAR-Datei, nämlich "PEAR.php" (siehe das require_once in der Datei mime.php). Wenn du dieses require anpaßt auf den Ort dieser Datei, sollte es funktionieren.

                - Sven Rautenberg

                --
                "Love your nation - respect the others."
                1. Ich kenn den Hoster aber persönlich, d.h. die Einstellungen könnte ich ändern, wenn ich wüsste was zu tun wär.
                  Würde es ausreichen in php.ini open_basedir '/usr/share/pear/' hinzufügen?

                  lg
                  Roland

                  1. Moin!

                    Ich kenn den Hoster aber persönlich, d.h. die Einstellungen könnte ich ändern, wenn ich wüsste was zu tun wär.

                    Das sollte der Hoster eigentlich auch selbst wissen, wenn du ihm sagst, dass du das installierte PEAR benutzen möchtest. Es ist immer eine gute Idee, nicht im Detail vorzukauen, was jemand machen soll, sondern die Intention darzustellen, um damit auch Alternativen zu ermöglichen.

                    Würde es ausreichen in php.ini open_basedir '/usr/share/pear/' hinzufügen?

                    Das könnte schon reichen, ich bin mir aber wegen der open_basedir-Direktive nicht sicher. Deshalb: Den Vor-Ort-Fachmann machen lassen.

                    - Sven Rautenberg

                    --
                    "Love your nation - respect the others."