Gerhard: Dateiinhalt anzeigen

Hallo, ich kenne mich leider noch nicht mit der objektor. Programmierung aus. Daher die Frage: Wie kann ich mir den Inhalt anzeigen lassen, der mit nachfolgenden Statement versendet erden soll?

$mail->send()

  1. Wie kann ich mir den Inhalt anzeigen lassen, der mit nachfolgenden Statement versendet erden soll?

    $mail->send()

    Das kommt darauf an, aus welcher Klasse heraus das Objekt mail konstruiert wurde.

    Mit Deinen Angaben lässt sich nicht viel mehr als

    <?php
    var_dump( get_object_vars( $mail ) );
    

    nahe legen. Stelle sicher, dass die Ausgabe,die ggf. im Browser erfolgt, als Text verstanden wird:

    <div class="debug">
    
      <h1>Anzeige via get_object_vars:</h1>
      <pre>
    <?php
    $vars = get_object_vars( $mail );
    echo( htmlspecialchars( print_r ( $vars ) ) );
    ?>
      </pre>
    
      <h1>Anzeige via array cast:</h1>
      <pre>
    <?php
    $arr = ( array )$mail;
    echo( htmlspecialchars( print_r( $arr ) ) );
    ?>
      </pre>
    </div>
    

    Literatureinstieg:

    https://www.php.net/manual/en/function.get-object-vars.php

    1. Ups. var_dump und print_r geben sofort aus - man kann aber diese Ausgaben puffern (ob_start();) und dann behandeln (echo htmlspecialchars( ob_get_clean() );) lassen:

      <?php
      class M {
         public $foo="<green>public</green>";
         private $bar="<red>private</red>";
      }
      
      $mail=new M;
      
      ?>
      <div class="debug">
      
        <h1>Anzeige via get_object_vars:</h1>
        <pre>
      <?php
      $vars = get_object_vars( $mail );
      ob_start();
      var_dump( $vars );
      echo htmlspecialchars( ob_get_clean() );
      ?>
        </pre>
      
        <h1>Anzeige via array cast:</h1>
        <pre>
      <?php
      $arr = ( array )$mail;
      ob_start();
      var_dump( $arr );
      echo htmlspecialchars( ob_get_clean() );
      ?>
        </pre>
      </div>
      

      Ausgaben:

      <div class="debug">
      
        <h1>Anzeige via get_object_vars:</h1>
        <pre>
      array(1) {
        [&quot;foo&quot;]=&gt;
        string(21) &quot;&lt;green&gt;public&lt;/green&gt;&quot;
      }
        </pre>
      
        <h1>Anzeige via array cast:</h1>
        <pre>
      array(2) {
        [&quot;foo&quot;]=&gt;
        string(21) &quot;&lt;green&gt;public&lt;/green&gt;&quot;
        [&quot;Mbar&quot;]=&gt;
        string(18) &quot;&lt;red&gt;private&lt;/red&gt;&quot;
      }
        </pre>
      </div>
      

      1. Habe leider gar nichts verstanden, das Programm send.php soll für mich auch weiterhin eine black box bleiben. Nur für die Fehlersuche würde ich gerne alle Daten sehen, die versendet werden.

        1. Lieber Gerhard,

          Habe leider gar nichts verstanden,

          dann solltest Du das Handbuch zu Deinem Mailer lesen.

          Irgendwo in Deinem Script befüllst Du $mail mit einem Objekt, das von irgendeiner Klasse (PHPMailer?) beschrieben wird. Damit $mail->send() überhaupt etwas verschicken kann, wirst Du jede Menge Parameter an Dein in $mail gespeichertes Objekt vergeben, darunter den Empfänger, einen Betreff und schließlich die Nachricht. Finde diese Stellen in Deinem Script! Und wenn Du sie gefunden hast, dann kannst Du dort sicher auch geeignete Debug-Ausgaben machen:

          function log ($text) {
            $path = __DIR__.'/debug.log';
            file_put_contents(
              $path, // Datei wird angelegt wenn nicht vorhanden
              $text.PHP_EOL, // Textinhalt und Zeilenumbruch
              FILE_APPEND // an das Ende der Datei anfügen
            );
          }
          
          // irgendwo in Deinem Script
          $mail = new PHPMailer();
          
          ... // Einstellungen für den Versand
          
          $mail->addAddress($to);
          log("Mail geht an <$to>");
          
          $mail->setFrom($from);
          log("Absender ist <$from>");
          
          $mail->Subject = $subject;
          log('Betreff der Mail: '.$subject);
          
          $mail->Body = $text;
          log('Nachricht der Mail: '.$text);
          
          $mail->send();
          

          Noch Fragen?

          Liebe Grüße

          Felix Riesterer

  2. Hallo Gerhard,

    wieso glaubst du, dass wir dein send.php kennen müssten? Ist mir was entgangen?

    Ist send.php der Mailer? Ist es nur eine Hülle um einen Mailer?

    Wie erstellst und befüllst du das $mail Objekt?

    Update: Es gab März 22 einen Monsterthread zum Thema Mail. Du verwendest PHPmailer? Was ist dann send.php?

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Sorry, hatte einen Blackout. Natürlich musste es heißen $mail->send(), und das Programm ist der PHPmailer.

      1. Sorry, hatte einen Blackout. Natürlich musste es heißen $mail->send(), und das Programm ist der PHPmailer.

        Und jetzt wieder die Frage: Wie erhalte ich alle Daten die versendet werden?

        1. Hallo Gerhard,

          wenn var_dump($mail), print_r($mail) oder der Vorschlag von Raketenwilli nicht tun, was Du möchtest, dann musst Du die Daten einzeln aus dem $mail-Objekt herausporkeln.

          Bei Subject und Body ist das einfach (natürlich musst Du die echos noch etwas erweitern, damit das Ergebnis lesbar ist).

          echo $mail->Subject;
          echo $mail->Body;
          

          Wie PHPMailer die übrigen Informationen speichert, dazu solltest Du dessen Doku konsultieren. Sicherlich gibt's da noch etliche weitere Eigenchaften. Ich habe den bisher noch nicht verwendet, darum werde ich jetzt für Dich nicht das PHPMailer-Handbuch lesen und abschreiben.

          Mit objekt->eigenschaft kann man jedenfalls beliebige öffentliche Eigenschaften eines Objekts ausgeben.

          Rolf

          --
          sumpsi - posui - obstruxi
          1. Hallo Rolf, danke für Deinen Einsatz. Kennst Du vielleicht ein Programm, das dem PHPmailer entspricht/ähnelt, aber in klassischem PHP realisiert ist?

            1. Servus!

              Kennst Du vielleicht ein Programm, das dem PHPmailer entspricht/ähnelt, aber in klassischem PHP realisiert ist?

              Den Begriff „klassisches PHP“ gibt es so nicht. Wenn Programme und Skript veralten, wird etwas Neues geschaffen. Dann auf dem Alten zu beharren, heißt Sicherheitslücken und Mängel bewusst zu erhalten.

              Aus diesem Grund haben wir das Tutorial zum Formmailer mit Swift Mailer durch ein ToDo ersetzt, weil der SwiftMailer nicht mehr erneuert wurde.

              Symphony empfiehlt den Symphony Mailer.

              Wenn Du wissen willst, was Symphony ist: PHP/Tutorials/Einführung in Symfony

              Herzliche Grüße

              Matthias Scharwies

              --
              Jemand interessiert? Ein Freund von uns will zum Forumstreffen, und hat bereits Hotelübernachtungen gebucht.
              Er hat vergessen, dass er im gleichen Zeitraum auch heiratet.
              Also für Interessierte: Du könntest am 25. November um 14 Uhr im Rathaus von Hannover heiraten.
              Ihr Name ist Sandra.
            2. Lieber Gerhard,

              Kennst Du vielleicht ein Programm, das dem PHPmailer entspricht/ähnelt, aber in klassischem PHP realisiert ist?

              diese Frage zeigt, dass Du entweder massiv dazulernen solltest, oder aber die Finger ganz davon lassen. Man kann sich mit Ahnungslosigkeit leicht eine Spam-Schleuder bauen. Das kann unangenehme rechtliche Konsequenzen nach sich ziehen.

              Liebe Grüße

              Felix Riesterer

              1. Offensichtlich hatte ich mich wieder nicht klar ausgedrückt! Unter klassisch habe ich verstanden das PHP, das nicht objektorientiert ist. Oder wird gerade diese Form nicht mehr unterstützt, und ich müsste alle meine PHP-Progrämmchen umschreiben.

                1. Servus!

                  Offensichtlich hatte ich mich wieder nicht klar ausgedrückt! Unter klassisch habe ich verstanden das PHP, das nicht objektorientiert ist. Oder wird gerade diese Form nicht mehr unterstützt, und ich müsste alle meine PHP-Progrämmchen umschreiben.

                  Nein, aber OOP und prozedurale Programmierung (das „klassische“ PHP) sind nicht so unterschiedlich.

                  Wie gesagt: SELFHTML hat seine Tutorials in den letzten 20 Jahren vom PHP-Formmailer hin zum SwiftMailer umgeschrieben, weil es in den älteren Versionen Sicherheitslücken gab.

                  Wenn Du jetzt etwas altes, unsicheres selbst reparieren willst, nur zu.

                  Aber würdest du das auch mit deiner Gas-Therme, deinem Sicherungskasten und Deinem auto tun?

                  Herzliche Grüße

                  Matthias Scharwies

                  --
                  Jemand interessiert? Ein Freund von uns will zum Forumstreffen, und hat bereits Hotelübernachtungen gebucht.
                  Er hat vergessen, dass er im gleichen Zeitraum auch heiratet.
                  Also für Interessierte: Du könntest am 25. November um 14 Uhr im Rathaus von Hannover heiraten.
                  Ihr Name ist Sandra.
                2. Lieber Gerhard,

                  Offensichtlich hatte ich mich wieder nicht klar ausgedrückt!

                  nein, Du hast fleißig versäumt alle Antworten in diesem Thread zu berücksichtigen. Insbesondere meine ursprüngliche Antwort hätte Dir nämlich weiterhelfen müssen.

                  Unter klassisch habe ich verstanden das PHP, das nicht objektorientiert ist. Oder wird gerade diese Form nicht mehr unterstützt, und ich müsste alle meine PHP-Progrämmchen umschreiben.

                  Du solltest das Mailen Fachleuten überlassen. Es gibt inzwischen so viele Stolpersteine und Extras, die den Mailversand unterwegs scheitern lassen können. Da hat es einfach keinen Sinn so etwas selbst bauen zu wollen. Und nur, weil Du Dich mit objektorientierter Schreibe schwer tust, ist das trotzdem kein Grund, es doch selbst zu versuchen.

                  Liebe Grüße

                  Felix Riesterer

            3. Hallo Gerhard,

              du musst doch kein OO können, um PHPMailer zu verwenden. Du verwendest das Ding als eine Blackbox, und ein Objekt - $mail - ist auch nicht viel anders als ein assoziatives Array.

              Nur Mut!

              Rolf

              --
              sumpsi - posui - obstruxi
        2. Lieber Gerhard,

          Und jetzt wieder die Frage: Wie erhalte ich alle Daten die versendet werden?

          Du hast wohl meine Antwort nicht gelesen...?

          Liebe Grüße

          Felix Riesterer

          1. Hatte ich leider tatsächlich nicht gelesen.