Ankündigung

Einklappen
Keine Ankündigung bisher.

Unterschied zwischen mail() und popen(/usr/sbin/sendmail)...

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Unterschied zwischen mail() und popen(/usr/sbin/sendmail)...

    Hallo,

    ich habe mir einen kleinen mini-mailer geschrieben der Anhand des Contents einen Mail Header und einen Mail Body zusammenbaut und diese dann per

    popen(/usr/sbin/sendmail ...) versendet.

    Was ist eigentlich der Unterschied zur PHP Funktion mail() ? Dient mail() als Wrapper für sendmail? Ich habe auf Hosteurope ein aktuelles Hosting und wenn ich ne simple mail ala

    Code:
    mail(to, subject, message);
    versenden will erhalte ich aus mail ein false zurück.
    http://www.donvelopment.org


  • #2
    Zitat von PHP Manual
    PHP muss während des Kompilierens Zugriff auf die Binärversion von sendmail auf Ihrem Rechner haben. Falls Sie ein anderes Mail-Programm, wie z.B. qmail oder postfix, benutzen, müssen Sie dafür sorgen, dass Sie den passenden, mitgelieferten sendmail-Wrapper verwenden. PHP sucht nach sendmail zunächst im System-PATH und anschließend hier: /usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib. Wir empfehlen, dass sendmail auf Ihrem Rechner im PATH verfügbar ist. Der Benutzer, der PHP kompiliert hat, muss die Berechtigung haben, auf die Binärversion von sendmail zuzugreifen.
    So wie ich das verstehe, ja.

    Zeig mal wie du versucht hast ne mail zu schicken (genauen Code)

    Empfehlenswert: http://phpmailer.sourceforge.net/
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      *öhm* Ich kann dir dazu jetzt keine genaue Stellungnahme geben aber kennst du den hier: http://phpmailer.sourceforge.net/

      Mit dem kannst saubere Mails verschicken. Wenn du lernen willst wie was wo dann ist ok ..

      der sendmail path wird wird in der php.ini festgelegt.
      Vllt ist der nicht richtig deklariert.



      Oder irgendein anderer Fehler hat sich eingeschlichen ....


      // EDIT: Omg ... ich sollt immer erst 5 Min warten ob da nicht jemand gerade das gleiche schreibt

      Kommentar


      • #4
        Hallo DonTermi,

        ich frag mich, warum du den "Umweg" über popen() machst. Einfacher geht das doch mit exec(), passthou() oder system(). Dort kannst du System-Befehle ausführen.

        Warum nun mail()? Ganz einfach: um eine weitere Abstraktions-Stufe einzuführen. In der php.ini kann man definieren, welchen MTA man verwenden möchte. Einige verwenden sendmail, andere wieder postfix. Du müsstest mit der ersten Variante immer deine Applikationen ändern, je nach dem, wo du sie einsetzt. Deshalb führt man Abstraktion ein und gibt dem PHP-Entwickler ein Standard-Interface an, mit dem er arbeiten kann und das sich nicht von System zu System ändert.

        [..] ein false zurück.
        Hmm, dann ist die Frage, ob dein Hoster PHP richtig für den Versand von Mails konfiguriert hat. Um dies herauszufinden, solltest du dir mal die KOnfigurationseinstellungen gemäß http://de2.php.net/manual/de/ref.mail.php per phpinfo() ansehen und vergleichen. SOllte dort beispielsweise kein sendmail_path definiert sein, könnte das schon das Problem sein. Andererseits ist es auch möglich, dass irgendein SPAM-Filter deine Mail schluckt. Zeig mal den Code für mail(), den du geschrieben hast.
        Viele Grüße,
        Dr.E.

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Think about software design before you start to write code!
        2. Discuss and review it together with experts!
        3. Choose good tools (-> Adventure PHP Framework (APF))!
        4. Write clean and reusable software only!
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Kommentar


        • #5
          .. ich tipp einfach zu langsam, oder zu viel
          Viele Grüße,
          Dr.E.

          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          1. Think about software design before you start to write code!
          2. Discuss and review it together with experts!
          3. Choose good tools (-> Adventure PHP Framework (APF))!
          4. Write clean and reusable software only!
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

          Kommentar


          • #6
            re

            Also ich hab nochmal unser 1. Hosting mit dem 2. Hosting (wo mail() nicht geht) verglichen. Die Einträge sind identisch.

            Meine Mails versende ich eigentlich so wie es phpmailer macht. Hab hier aber noch ältere Skripte liegen wo einfach nur mail() verwendet wird und es auf unserem 1. Hosting läuft und aber auf dem 2. nicht.

            Ich mach nichts anderes als:
            Code:
            mail('foo@bar.com', 'testbetreff', 'testnachricht');
            Auf Hosting 1 wird die Mail versendet und kommt an.
            Auf Hosting 2 erhalte ich ein false aus der Funktion zurück und es kommt auch keine Mail an.

            Auf beiden Hostings geht meine eigene Mailerklasse (popen direkt über sendmail) wunderbar.
            http://www.donvelopment.org

            Kommentar


            • #7
              Hallo DonTermi,

              dann würde ich damit mal deinen 2.ten Hoster konfrontieren. Ich möchte mich nicht zu weit aus dem Fenster lehnen, aber ich tippe mal auf falsch installierten postfix-Alias für sendmail.
              Viele Grüße,
              Dr.E.

              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              1. Think about software design before you start to write code!
              2. Discuss and review it together with experts!
              3. Choose good tools (-> Adventure PHP Framework (APF))!
              4. Write clean and reusable software only!
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

              Kommentar


              • #8
                http://de.php.net/manual/de/function.mail.php
                additional_headers (optional)

                String, der am Ende des E-Mail-Headers eingefügt werden soll.

                Dies kann benutzt werden, um zusätzliche Header-Angaben wie From, Cc oder Bcc anzugeben. Falls mehrere solcher zusätzlichen Header-Angaben angegeben werden soll, müssen diese durch ein CRLF-Zeichen (\r\n) getrennt werden.

                Anmerkung: Um eine E-Mail zu senden, muss die E-Mail einen From-Header enthalten. Dies kann entweder durch Setzen eines additional_headers-Parameters oder durch Setzen eines Standardwertes in der php.ini geschehen.

                Falls dies nicht geschieht, wird eine Fehlermeldung ähnlich wie Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing ausgegeben. Der From: Header setzt unter Windows auch den Return-Path: Header.

                Anmerkung: Wenn E-Mails nicht ankommen, versuchen Sie bitte, nur das LF-Zeichen (\n) zu verwenden. Einige UNIX-MTAs (mail transfer agents) ersetzen leider LF durch CRLF (\r\n) automatisch (wodurch das CR-Zeichen verdoppelt wird, wenn CRLF verwendet wird). Dies sollte aber nur in Ausnahmefällen geschehen, da es gegen » RFC 2822 verstößt.
                Setz einfach mal ein einen gültigen From ein, das war bei uns damals das Problem.

                Kommentar


                • #9
                  War nah dran

                  der 5. Parameter war das Problem.

                  Code:
                  mail('foo@bar.com', 'subject', 'message', 'From: service@tld.com', '-f service@tld.com');
                  Danach gings.
                  http://www.donvelopment.org

                  Kommentar

                  Lädt...
                  X