satanus: art newsletter

Hallo Miteinander,

Ich habe jeniges Problem, und erbitte die Hilfe der allseits für ihren Support berühmten Mitglieder des SelfHTML-Forums.
Das Problem beschreibt sich darin, dass ich versucht habe, eine Art Newsletter zu programmieren. Da dieser nicht wie geplant funktioniert, habe ich das Programm auf das Wesentliche reduziert, und habe den Fehler entdeckt. Anscheinend wird das Mail nicht versendet, aber eigentlich doch (hä?).

Die Reduzierung auf das Wesentliche umfasst nun nurmehr eine Auslesung aus einer Datenbank (E-Mailadresse) und eine, in jedem Durchlauf der Schleife, Versendung eines Textes an die Adresse des aktuellen Durchlaufes.
Genau das funktioniert nicht. Weiß einer von euch warum das nicht tut?

Folgende Punkte sind schon einmal - meiner Prüfung nach - auszuschließen:
(1) Spamblocker meines E-Mailaddy anbieters... Ich habe nach der Schleife einen simplen "mail(...)"tag eingebaut, um zu prüfen, ob überhaupt eine Mail, von einem Server gesendet, nicht geblockt wird...

(2) Es wird überhaupt nichts gesendet... Durch Ausgabe aller benötigten Daten (E-Mailadresse, usw.) und des Rückgabewertes von mail() ist dies auch auszuschließen. Rückgabewert sei anscheinend "1", aber ich erhalte um Gottes Willen keine E-Mail

Hmm... Ich weiß echt nicht weiter..

Vielen Dank für eure großzügige Hilfe

mfG,
satanus

  1. HeHe Teufelchen,

    haste mal ne´n Code ?

    Danke
    achJA?

    1. Servus,

      türlich, türlich:
      /***********************

      require "./stuff/global.php";

      //Klassendeklarierung und Inizialisierung der benötigten Variablen
        $db = new database;
        $db->host = $mhost;
        $db->user = $muser;
        $db->pass = $mpass;
        $db->base = $mbase;
        $db->connect();

      $sdatum=date("ymd");
        $sdatum1=$sdatum+14;

      $string="select * from ".$dh\_termine." where watch>'".$sdatum."' and watch<'".$sdatum1."'";
        $db->query($string);

      $num=$db->n_rows();

      if($num<1) {
          echo "Keine Termine vorhanden";
      $suc=2;
        }
        else {

      while($result=$db->f_array()) {

      $string="select * from ".$dh\_letter." where free='1' order by id";
            $sql=mysql_query($string);

      while($array=mysql_fetch_array($sql)) {

      eval("$text=$result['".$array['lang']."_text'];");

      $subject="(url.com) betreff";
           $emailto=$array['email'];
              $header="From: "url.com" me@localhost.com\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1";

      $content=.... irgendeintext...

      $return=mail($emailto, $subject, $content, $header);
        echo $return."<br><br>";

      if($return) {
             $suc=1;
           }
           else {
             $suc=0;
             break;
           }
         }
          }
        }

      if($suc==1) echo "Erfolgreich versendet<br><br>";
        elseif($suc==2) echo "";
        else echo "Fehler<br><br>";
      ***********************/

      hier wird bei "echo $return" immer "1" ausgegeben.. Demnäch müsste es eig. funktionieren, doch ganz im Gegenteil.. :-/

      Gruß,
      satanus hu hu hu

      1. echo $begrueszung;

        Auf den ersten und zweiten Blick kann ich den Fehler nicht erkennen. Aber:

        Hier verwendest du zwar eine Klasse zur Datenbank-Abstraktion

        $db = new database;

        aber hier

        $sdatum=date("ymd");

        und hier

        $string="select * from ".$dh\_termine." where watch>'".$sdatum."' and watch<'".$sdatum1."'";

        wirst du schon wieder datenbankspezifisch (Format des Datumswertes, Maskierung von Schlüsselwörtern und Zeichenfolgen), und damit

        $sql=mysql_query($string);

        greifst du gleich direkt durch. Welchen Sinn hat dann die Abstraktion der DB-Zugriffe überhaupt?

        eval("$text=$result['".$array['lang']."_text'];");

        Das eval() ist hier überflüssig. Das lässt sich auch so schreiben:

        $text = $result[$array['lang'] . '_text'];

        Im Falle eines (mit oder ohne Absicht) "fehlerhaften" Eintrages wird dieser Fehleintrag dann nicht auch noch als PHP-Code ausgewertet. Es gibt dann nur eine Notice wegen des nicht vorhandenen Keys.

        Hast du dir mal die Inhalte der Variablen, die du an mail() gibst anzeigen lassen? Hast du auch das error_reporting auf E_ALL stehen?

        echo "$verabschiedung $name";

        1. hallo

          Hier verwendest du zwar eine Klasse zur Datenbank-Abstraktion

          $db = new database;

          das ist korrekt...

          aber hier

          $sdatum=date("ymd");

          ja, und?

          und hier

          $string="select * from ".$dh\_termine." where watch>'".$sdatum."' and watch<'".$sdatum1."'";

          wirst du schon wieder datenbankspezifisch (Format des Datumswertes, Maskierung von Schlüsselwörtern und Zeichenfolgen), und damit

          $sql=mysql_query($string);

          greifst du gleich direkt durch. Welchen Sinn hat dann die Abstraktion der DB-Zugriffe überhaupt?

          da es sich in ner schleife befindet, und das schonmal nicht funktioniert hat, ist das der einzige weg, wie es funktioniert.. ich maaag jetzt neeed alles umschreiben :-(

          eval("$text=$result['".$array['lang']."_text'];");

          Das eval() ist hier überflüssig. Das lässt sich auch so schreiben:

          $text = $result[$array['lang'] . '_text'];

          ah.. kuhl, thx ;-)

          Im Falle eines (mit oder ohne Absicht) "fehlerhaften" Eintrages wird dieser Fehleintrag dann nicht auch noch als PHP-Code ausgewertet. Es gibt dann nur eine Notice wegen des nicht vorhandenen Keys.

          nene, der passt scho..

          Hast du dir mal die Inhalte der Variablen, die du an mail() gibst anzeigen lassen? Hast du auch das error_reporting auf E_ALL stehen?

          ja.. das hat alles gepasst...
          hey, ich könnte mal.. heureka!

          ;-)

          gruß,
          satanus

          1. hallo

            naja, es wird mal alles ausgegeben, aber es kommt nix an :-(

            gruß
            satanus

            1. hallo

              jetzt funktionierts... es lag an meinem provider

              gruß
              satanus