TH: viele mail über mysql

hi,
kann mir irgend jemand helfen.
ich habe für den kunden eine newsletter gebaut.
wie kriege ich das hin, wenn die datenbank für 30 oder 300 empfänger hat und über mysql gesteuert wird.
Danke!

  1. Hallo

    wie kriege ich das hin, wenn die datenbank für 30 oder 300 empfänger hat und über mysql gesteuert wird.

    Was meinst du damit genau?

    1. Hi,

      Was meinst du damit genau?

      Hi,

      Ich denke er möchte wissen, wie er eMails an Empfänger verschicken kann, derwen Adressen in einer Datenbank stehen..
      Kann natürlich auch was anderes gemeint sein bei so einer Fragestellung ;)

      Grüße

      1. ich weiß nicht, wie ich die email an die empfänger senden kann.
        quelltext:
        (aber es kommt nur eine an !!!)

        $Header = "MIME-Version: 1.0\n";
        $Header .= "Content-type: text/html; charset=iso-8859-1\n";
        $Header .= "From: ".$email_ver."\n";

        E-Mail auslesen

        $sqlN = "select * from new_email where new_ein = 2";
        $resultn = mysql_query($sqlN);
        if($resultn) {
        $rows = mysql_num_rows($resultn);
        $n = 0;
        while ($n < $rows) {
        $rsn = mysql_fetch_array($resultn);

        Content auslesen

        $sql = "select * from newsletter where idseq =".$idseq;
        $resultS = mysql_query($sql);
        if($resultS){
        $rows = mysql_num_rows($resultS);
        $s = 0;
        while ($s < $rows) {
        $rsS = mysql_fetch_array($resultS);

        $Betreff = $rsS[news_betr];      $Nachricht = "
        <html>
        <head> ... und so weiter

        1. Hallo,

          ich vermute, dass Du hier

          $sqlN = "select * from new_email where new_ein = 2";

          die E-Mail-Adressen auslesen willst.

          while ($n < $rows) {

          warum Du aber für jede E-Mail-Adresse, den Content erneut ausliest, das
          entzieht sich meinem Vorstellungsvermögen.

          Content auslesen

          $sql = "select * from newsletter where idseq =".$idseq;

          dazu hast Du den relevanten Teil, das Versenden der Mail weggekürzt.

          Du solltest dringend an den Einsatz von Funktionen denken oder gleich den
          objektorientierten Ansatz wählen. Weiterhin leidet Dein Skript an akutem Mangel
          an Fehlerbehandlung.

          Freundliche Grüße

          Vinzenz

          1. echo $begrüßung;

            Weiterhin leidet Dein Skript an akutem Mangel an Fehlerbehandlung.

            Es ist ja nur ein Ausschnitt, bei dem der Rest der Schleifen und enthaltenen if-Konstrukte fehlt. Das was er gepostet hat, erkennt schon mal wenn mysql_query() einen Fehler zurückliefert und läuft dann nicht blind in die Abfrageschleife rein, so wie das viele Anfänger gern machen.

            echo "$verabschiedung $name";

        2. echo $begrüßung;

          ich weiß nicht, wie ich die email an die empfänger senden kann.

          Mit mail(), aber das, nehme ich an, wird nicht dein Problem sein.

          (aber es kommt nur eine an !!!)

          Ursache wird die Mehrfachverwendung einer Variablen sein. Du füllst sie für die eine Schleife, überschreibst sie aber in der zweiten. Eine Kontrollausgabe der Variableninhalte hilft, solche Fehler zu finden, wenn du sie nicht anhand deines Codes entdeckst.

          $resultn = mysql_query($sqlN);
          if($resultn) {
          $rows = mysql_num_rows($resultn);
          $n = 0;
          while ($n < $rows) {
          $rsn = mysql_fetch_array($resultn);

          Die Verwendung von Einrückungen machte den Code lesbarer ...
          Obiges Codefragment schreibt mal im Allgemeinen so:

          if ($resultn = mysql_query($sqlN)) {
            while ($rsn = mysql_fetch_array($resultn)) {

          Normalerweise kann man das Ergebnis erst zählen, wenn man es vollständig gefetcht hat. Doch PHP macht das bereits im Hintergrund, weswegen mysql_num_rows auch dann geht, wenn du noch nicht alle Datensätze geholt hast. Da du aber sowieso alle Datensätze haben willst, kannst du sie auch einzeln holen, bis keiner mehr da ist, ohne ihre Anzahl zu kennen.

          Du liest weiterhin den Content innerhalb der Empfänger-Schleife jedes Mal neu aus der DB aus. Bekommt jeder Empfänger einen unterschiedlichen Newsletter oder bekommen sie alle den gleichen? Mir scheint, letzteres der Fall. Hol den Newsletter zuerst und nur eimal ab. Datenbankabfragen sind vergleichsweise "teuer". Reduziere sie und die dabei abzufragende Datenmenge stets auf ein Minimum.

          echo "$verabschiedung $name";

          1. echo $begrüßung;

            Nachtrag:

            $rsn = mysql_fetch_array($resultn);

            mysql_fetch_array() ohne den zweiten Parameter result_type ist im Allgemeinen auch nicht die Funktion, die man haben möchte, sondern eine ihrer spezialisierteren Geschwister: mysql_fetch_row() oder mysql_fetch_assoc().

            echo "$verabschiedung $name";

  2. Hallo

    ich habe für den kunden eine newsletter gebaut.
    wie kriege ich das hin, wenn die datenbank für 30 oder 300 empfänger hat und über mysql gesteuert wird.

    Da gibt es sehr viele unterschiedliche Möglichkeiten.
    Du könntest z.B. auf dem Mailserver des Kunden Mailinglisten verwenden,
    Du könntest mit der Dir zur Verfügung stehenden Programmiersprache (wohl PHP)
    auch selbst die Empfänger aus der DB auslesen und die Mails in Serie versenden.
    Dabei solltest Du auf die Laufzeitbeschränkung Deines Skriptes achten - und die
    Mails entweder in hübschen kleinen Paketen versenden (dabei nicht vergessen,
    darauf zu achten, welche schon versandt wurden) oder die Aufgabe einem Prozess
    im Hintergrund zu übergeben.

    Es hängt halt vieles davon ab, wie Du das realisiert hast, realisieren willst,
    realisieren kannst und natürlich der Konfiguration der Server, die bei diesem
    Newsletter verwendet werden.

    kann mir irgend jemand helfen.

    Konkreter kann man Dir nur helfen, wenn Du Dein Problem genauer beschreibst.

    Freundliche Grüße

    Vinzenz

  3. hi, das ist der quelltext:

    $Header = "MIME-Version: 1.0\n";
       $Header .= "Content-type: text/html; charset=iso-8859-1\n";
       $Header .= "From: ".$email_ver."\n";

    # E-Mail auslesen
       $sqlN = "select * from new_email where new_ein = 2";
       $resultn = mysql_query($sqlN);
       if($resultn)
       {
        $rows = mysql_num_rows($resultn);
        $n = 0;
        while ($n < $rows)
        {
         $rsn = mysql_fetch_array($resultn);
         # Content auslesen
         $sql = "select * from newsletter where idseq =".$idseq;
         $resultS = mysql_query($sql);
          if($resultS)
          {
           $rows = mysql_num_rows($resultS);
           $s = 0;
           while ($s < $rows)
           {
            $rsS = mysql_fetch_array($resultS);
            $Betreff = $rsS[news_betr];

    $Nachricht = "
            <html>
            <head>
            <style type="text/css"> body { background-color:#E0E0E0;} p { font: normal 11px Tahoma,sans-serif;}</style>
            </head>
            <body>
            <table width="700" border="0" align="center" style="border: 1px solid #777; background: #fff; padding: 2px;">
             <tr>
              <td><p><b>Sehr geehrte Abonnentin, sehr geehrter Abonnent,</b><br>anbei finden Sie den aktuellen Newsletter.</p></td>
             </tr>
             <tr>
              <td><hr align="left" width="100%" size="1" noshade></td>
             </tr>
             <tr>
              <td><p>$rsS[news_text]</p></td>
             </tr>
             <tr>
              <td><hr align="left" width="100%" size="1" noshade></td>
             </tr>
             <tr>
              <td><p>Sie sind mit folgender eMail-Adresse zum Newsletter-Service eingetragen: $rsn[new_adresse]<br>
               Wenn Sie den Newsletter abmelden, Ihre eMail-Adresse oder das Newsletter-Format ändern möchten, klicken Sie <a href="http://www.idis-web.de/abmelden.php?idseq=$rsn[idseq]">hier.</a></p></td>
             </tr>
            </table>
            </body>
            </html>
            ";

    $s++;
           }
          }
         $n++;
         $Empfaenger = $rsn[new_adresse];
         }
        }
       mail($Empfaenger, $Betreff, $Nachricht, $Header);

    1. echo $begrüßung;

      hi, das ist der quelltext:

      Wenn du für jedem Empfänger eine Mail versenden möchtest, dann darf der Aufruf der mail()-Funktion nicht außerhalb der Schleife platziert werden.

      echo "$verabschiedung $name";

      1. echo $begrüßung;

        hi, das ist der quelltext:

        Wenn du für jedem Empfänger eine Mail versenden möchtest, dann darf der Aufruf der mail()-Funktion nicht außerhalb der Schleife platziert werden.

        echo "$verabschiedung $name";

        qellcode:

        -> Es passiert immer das gleiche, wenn zb 2 adresse eingeben und verschicke dann kommt nur eine an!!

        $sqlN = "select * from new_email where new_ein = 2";
           $resultn = mysql_query($sqlN);
           if($resultn)
           {
            $rows = mysql_num_rows($resultn);
            $n = 0;
            while ($n < $rows)
            {
             $rsn = mysql_fetch_array($resultn);
             # Content auslesen
             $sql = "select * from newsletter where idseq =".$idseq;
             $resultS = mysql_query($sql);
              if($resultS)
              {
               $rows = mysql_num_rows($resultS);
               $s = 0;
               while ($s < $rows)
               {
                $rsS = mysql_fetch_array($resultS);
                $Betreff = $rsS[news_betr];

        $Nachricht = "
                <html>
                <head>
                <style type="text/css"> body { background-color:#E0E0E0;} p { font: normal 11px Tahoma,sans-serif;}</style>
                </head>
                <body>
                <table width="700" border="0" align="center" style="border: 1px solid #777; background: #fff; padding: 2px;">
                 <tr>
                  <td><p><b>Sehr geehrte Abonnentin, sehr geehrter Abonnent,</b><br>anbei finden Sie den aktuellen Newsletter.</p></td>
                 </tr>
                 <tr>
                  <td><hr align="left" width="100%" size="1" noshade></td>
                 </tr>
                 <tr>
                  <td><p>$rsS[news_text]</p></td>
                 </tr>
                 <tr>
                  <td><hr align="left" width="100%" size="1" noshade></td>
                 </tr>
                 <tr>
                  <td><p>Sie sind mit folgender eMail-Adresse zum Newsletter-Service eingetragen: $rsn[new_adresse]<br>
                   Wenn Sie den Newsletter abmelden, Ihre eMail-Adresse oder das Newsletter-Format ändern möchten, klicken Sie <a href="http://www.idis-web.de/abmelden.php?idseq=$rsn[idseq]">hier.</a></p></td>
                 </tr>
                </table>
                </body>
                </html>
                ";
                $s++;
               }
              }
             $Empfaenger = $rsn[new_adresse];
             mail($Empfaenger, $Betreff, $Nachricht, $Header);
             ?><p>Sie haben eine E-Mail Adresse an <?= $rsn[new_adresse] ?> geschickt!</p><?
             $n++;
             }
            }

        1. echo $begrüßung;

          Wenn du für jedem Empfänger eine Mail versenden möchtest, dann darf der Aufruf der mail()-Funktion nicht außerhalb der Schleife platziert werden.
          -> Es passiert immer das gleiche, wenn zb 2 adresse eingeben und verschicke dann kommt nur eine an!!

          Gut, einen Hinweis hast du nun beachtet. Wie sieht es mit den anderen Hinweisen aus? Woran scheitert die Umsetzung? Wenn du deinen Code wie vorgeschlagen entschlackst verschwindet auch dein Problem, weil es dann nicht mehr vorhanden ist.

          echo "$verabschiedung $name";

          1. es hat geklappt!
            Vielen Dank!!!!

            mfg
            thomas