ha-bauer: Array mit Inhalt aus Datenbank füllen

Hallo zusammen,

ich bin gerade dabei, einen Datenbank- basierten Newsletter auf die Beine zu stellen. Das Skript, womit man sich für den Newsletter anmelden kann, habe ich schon fertig. Wenn man sich dort registriert, wird die e-mail- Adresse in der Datenbank abgespeichert.

Jetzt will ich den Newsletter mit einem kleinen Webmailer verschicken. Diesen betreibe ich mit der HTMLmail- Klasse von Richard Heyes. Die Mail soll dann an alle, die sich in meine Datenbank eingetragen haben, verschickt werden. Die Zeile, die für das Verschicken der Mail sorgt, sieht so aus:
$result = $mail->send(array("em@pfaenger.de"));
Jetzt habe ich schon probiert, wie ich meine Datenbankeinträge auch in ein array umwandeln kann:

include "zugriff.inc.php";  
$sql = "SELECT * FROM newslettersubscriber WHERE member=1";  
$result = mysql_query($sql);  
// while-Schleife Anfang  
while ($row = @mysql_fetch_array($result)) {  
    $Mailadresse = $row["email"];  
    echo "'$Mailadresse'" . ",";  
    }  
mysql_close();  
}

Ausgegeben wird dann (wie gewünscht): 'em@pfaenger.de','2ter@empfaenger.de' ...
Wie schaffe ich es jetzt, dieses array, welches mit der Funktion mysql_fetch_array() entsteht, in meine Datei einzubinden, womit ich die Mail verschicke? Dass es dann also so aussieht:
$result = $mail->send(array('em@pfaenger.de','2ter@empfaenger.de',...));

Für Antworten wäre ich dankbar. Ich habe schon viel hin und her probiert, komme aber irgendwie nicht weiter. Oder bin ich auf einem ganz falschen Weg? Gibt es vielleicht einen anderen Ansatz?

Viele Grüße und Danke,
ha-bauer

  1. Hallo!

    Wie schaffe ich es jetzt, dieses array, welches mit der Funktion mysql_fetch_array() entsteht, in meine Datei einzubinden, womit ich die Mail verschicke? Dass es dann also so aussieht:
    $result = $mail->send(array('em@pfaenger.de','2ter@empfaenger.de',...));

    Du schreibst eine Schleife. Ich würde dir aber davon abraten.
    In deiner Variante bekommt jeder Empfänger des Newsletters die E-mailadressen der anderen Empfänger mitgeliefert. Jeder Spammer ist dir dafür dankbar.

    Grüße, Matze

    1. Hallo!

      Du schreibst eine Schleife. Ich würde dir aber davon abraten.
      In deiner Variante bekommt jeder Empfänger des Newsletters die E-mailadressen der anderen Empfänger mitgeliefert. Jeder Spammer ist dir dafür dankbar.

      Grüße, Matze

      Hi Matze,

      vielen Dank für deine Antwort. Was würdest du das Problem denn lösen?

      Viele Grüße,

      ha-bauer

      1. Hallo!

        vielen Dank für deine Antwort. Was würdest du das Problem denn lösen?

          
        $newsletter = "Ich bin ein toller Newsletter";  
        include "zugriff.inc.php";  
        $sql = "SELECT * FROM newslettersubscriber WHERE member=1";  
        $result = mysql_query($sql);  
        // Hier fehlt die Fehlerabfrage  
        while ($row = @mysql_fetch_array($result)){ // Fehleranzeigen zu unterdrücken war noch nie eine gute Idee  
            $betreff = "Newsletter";  
            $headers = "MIME-Version: 1.0\r\n";  
            $headers .= "Content-type: text/plain; charset=utf-8\r\n";  
            $headers .= "Content-Transfer-Encoding: 8bit\r\n";  
            $headers .= "From: Meine tolle Domain <email@domain.tld>\r\n";  
            mail($row["email"], $betreff, $mailtxt, $headers);  
        }  
        
        

        Grüße, Matze

        1. $newsletter = "Ich bin ein toller Newsletter";
          include "zugriff.inc.php";
          $sql = "SELECT * FROM newslettersubscriber WHERE member=1";
          $result = mysql_query($sql);
          // Hier fehlt die Fehlerabfrage
          while ($row = @mysql_fetch_array($result)){ // Fehleranzeigen zu unterdrücken war noch nie eine gute Idee
              $betreff = "Newsletter";
              $headers = "MIME-Version: 1.0\r\n";
              $headers .= "Content-type: text/plain; charset=utf-8\r\n";
              $headers .= "Content-Transfer-Encoding: 8bit\r\n";
              $headers .= "From: Meine tolle Domain email@domain.tld\r\n";
              mail($row["email"], $betreff, $mailtxt, $headers);
          }

          Hallo Matze,  
          vielen Dank für deine Antwort. Dann werde ich es so machen.  
          Viele Grüße und nochmals danke,  
          ha-bauer
          
          1. Kleine Verbesserung und Korrektur:

            $mailtxt = "Ich bin ein toller Newsletter";  
            $betreff = "Newsletter";  
            $headers = "MIME-Version: 1.0\r\n";  
            $headers .= "Content-type: text/plain; charset=utf-8\r\n";  
            $headers .= "Content-Transfer-Encoding: 8bit\r\n";  
            $headers .= "From: Meine tolle Domain <email@domain.tld>\r\n";  
            include "zugriff.inc.php";  
            $sql = "SELECT * FROM newslettersubscriber WHERE member=1";  
            $result = mysql_query($sql);  
            // Hier fehlt die Fehlerabfrage  
            while ($row = @mysql_fetch_array($result)){ // Fehleranzeigen zu unterdrücken war noch nie eine gute Idee  
                mail($row["email"], $betreff, $mailtxt, $headers);  
            }
            

            Grüße, Matze

            1. Ach ärgerlich, das passiert wenn man kopiert und nicht selbst schreibt...

              mail($row"email"

              Es heißt mail($row['email']..., also einfache Anführungszeichen.

              Grüße, Matze

              1. Moin!

                Ach ärgerlich, das passiert wenn man kopiert und nicht selbst schreibt...

                mail($row"email"

                Es heißt mail($row['email']..., also einfache Anführungszeichen.

                Nein, warum?

                - Sven Rautenberg

                --
                "Love your nation - respect the others."
                1. Hallo Sven!

                  mail($row"email"

                  Es heißt mail($row['email']..., also einfache Anführungszeichen.

                  Nein, warum?

                  Das Manual sagt:
                  The simplest way to specify a string is to enclose it in single quotes (the character ').

                  Warum nicht? Zwischen den ' muss nichts geparst werden.

                  Grüße, Matze

                  1. Moin!

                    Hallo Sven!

                    mail($row"email"

                    Es heißt mail($row['email']..., also einfache Anführungszeichen.

                    Nein, warum?

                    Das Manual sagt:
                    The simplest way to specify a string is to enclose it in single quotes (the character ').

                    Warum nicht? Zwischen den ' muss nichts geparst werden.

                    Was ist das denn für ein Argument? Bei den Definitionen der anderen Strings in deinem Code - zu dessen Posting ich mich ja grundsätzlich geäußert hatte - verwendest du auch einfach doppelte Anführungszeichen, ohne die Notwendigkeit eines Parsens des Inhalts zu unterscheiden.

                    - Sven Rautenberg

                    --
                    "Love your nation - respect the others."
                    1. Hallo Sven!

                      Das Manual sagt:
                      The simplest way to specify a string is to enclose it in single quotes (the character ').

                      Warum nicht? Zwischen den ' muss nichts geparst werden.

                      Was ist das denn für ein Argument? Bei den Definitionen der anderen Strings in deinem Code - zu dessen Posting ich mich ja grundsätzlich geäußert hatte - verwendest du auch einfach doppelte Anführungszeichen, ohne die Notwendigkeit eines Parsens des Inhalts zu unterscheiden.

                      Das ist richtig, hat aber weniger mit Argumentation zu tun, als es eine blöde Angewohnheit von mir ist.
                      Ich hätte erwartet, du fragst warum ich die Variablen nicht in Single-Quotes setze, nicht warum ich es bei dem Array gemacht hab.

                      Grüße, Matze

        2. Moin!

          Hallo!

          vielen Dank für deine Antwort. Was würdest du das Problem denn lösen?

          $newsletter = "Ich bin ein toller Newsletter";
          include "zugriff.inc.php";
          $sql = "SELECT * FROM newslettersubscriber WHERE member=1";
          $result = mysql_query($sql);
          // Hier fehlt die Fehlerabfrage
          while ($row = @mysql_fetch_array($result)){ // Fehleranzeigen zu unterdrücken war noch nie eine gute Idee
              $betreff = "Newsletter";
              $headers = "MIME-Version: 1.0\r\n";
              $headers .= "Content-type: text/plain; charset=utf-8\r\n";
              $headers .= "Content-Transfer-Encoding: 8bit\r\n";
              $headers .= "From: Meine tolle Domain email@domain.tld\r\n";
              mail($row["email"], $betreff, $mailtxt, $headers);
          }

            
          Sorry, wenn ich das jetzt drastisch formuliere, aber: Das kommentarlose Abliefern von Quelltext ist selten hilfreich!  
            
          Die Frage war, wie man es besser hinkriegt, einen Newsletter mit einer existierenden Mail-Klasse zu versenden, wenn nicht jeder Empfänger des Newsletters alle anderen Empfänger sehen können soll.  
            
          Deine Antwort enthält keinerlei Nutzung dieser Mail-Klasse, und auch keinerlei Hinweise, wie man das im Grundsatz sinnvoll hinkriegen könnte, stattdessen nur eine kommentarlose Codewüste mit teils sehr fragwürdigen Codeteilen.  
            
          Findest du das selbst hilfreich, auf eine in menschlicher Sprache formulierte Frage einfach nur Code vor den Latz geknallt zu kriegen?  
            
           - Sven Rautenberg
          
          -- 
          "Love your nation - respect the others."
          
          1. Hallo Sven!

            Deine Antwort enthält (...) stattdessen nur eine kommentarlose Codewüste mit teils sehr fragwürdigen Codeteilen.

            Ich denk du beziehst dich auf dieses Stück.

            $headers = "MIME-Version: 1.0\r\n";
                $headers .= "Content-type: text/plain; charset=utf-8\r\n";
                $headers .= "Content-Transfer-Encoding: 8bit\r\n";
                $headers .= "From: Meine tolle Domain email@domain.tld\r\n";

              
            Ok, bei UTF-8 kodierten Mails sollte man die "MIME-Version: 1.0" mitschicken damit imap\_fetchstructure() die Mail auch als solche (UTF-8 kodiert) erkennt.  
              
            Danach schreibe ich den Content-type und den Zeichensatz (UTF-8). Sollte selbsterklärend sein. (ja, HTML-Mails sind weg)  
              
            Content-Transfer-Encoding auf 8bit damit die Umlaute übertragen werden.  
              
            Und jetz das Schlimmste:  
              
            
            > Deine Antwort enthält keinerlei Nutzung dieser Mail-Klasse(...)  
              
            Richtig, weil ich keine Notwendigkeit dafür sehe und HTML-mails allgemein vermeiden würde. Hätte ich vielleicht mal erwähnen sollen...  
              
            
            > Sorry, wenn ich das jetzt drastisch formuliere, aber: Das kommentarlose Abliefern von Quelltext ist selten hilfreich!  
              
            Hast recht, irgendwie nicht. Find ich aber nicht \*drastisch\* formuliert, stimmt ja ;)  
              
            
            > Findest du das selbst hilfreich, auf eine in menschlicher Sprache formulierte Frage einfach nur Code vor den Latz geknallt zu kriegen?  
              
            Hey die Funktionen in PHP haben doch soooo blumige Namen... ;D scnr  
            Hast natürlich recht. Sorry.  
              
              
            Grüße, Matze