+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 15 von 25

Thema: Newsletter - Emails in 50er Schritten verschicken, wie am besten?

  1. #1
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420

    Newsletter - Emails in 50er Schritten verschicken, wie am besten?

    Hi,

    ich bin gerade dabei, einen eigenen Newsletter auf die Beine zu stellen. Ich stehe nun vor dem Problem, wie ich am besten die Emails erstelle und auch verschicke. Ab einer bestimmten Anzahl von Abonennten würde das Skript nämlich "zu lange" brauchen und würde gestoppt werden (Timeout).

    Nun kann ich das ja so lösen, wie beim Newsletterskript von php-abc.com - mit einee (dynamische) Seite, die Emails z.B. in 50er Schritten verschickt, sich mit einem META REFRESH selbst aufruft und die nächsten 50 verschickt.

    Was mich intessieren würde - könnte man anstelle des META-Tags dies auch mit Hilfe von header() realisieren? Oder wäre das auf eine gewisse Art und weise "zu schnell"?
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  2. #2
    seb
    seb ist offline
    TP-Veteran seb bringt sich richtig ein seb bringt sich richtig ein
    Registriert seit
    Jan 2002
    Beiträge
    1.741
    Hmmm...dazu hab ich grad letztens was in der deutschen Usenet-Group gelesen, nur leider find ich's nicht mehr .

    Laut dem Beitrag sei es jedenfalls die eleganteste und schnellste Lösung, mail() nur einmal aufzurufen und sämtliche Empfänger als BCC im Header einzutragen.
    Mit war die Idee völlig neu, aber es klang überzeugend...kannst dich ja mal umgucken, vielleicht findest du was zu dem Thema...

  3. #3
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Das mit dem BCC kenne ich auch, aber:

    - manche Server verschicken die Email nicht, wenn zu viele Empfänger im BCC stehen

    - man kann keine "peronalisierte" Email erstellen mit dieser Variante (Name des Empfängers einfügen, einen Link zum abmelden etc.)

    - Wenn das erstellen des BCC zu lange dauert (bei sehr vielen Abonennten), wird das Skript abgebrochen (PHP Timeout) ...
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  4. #4
    seb
    seb ist offline
    TP-Veteran seb bringt sich richtig ein seb bringt sich richtig ein
    Registriert seit
    Jan 2002
    Beiträge
    1.741
    Hmmm...unter den Umständen...keine Ahnung, 'instinktiv' würd ich zuerst den header()-Weg ausprobiern - wenns klappt, wunderbar, und wenn nicht halt meta tag...

  5. #5
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Ich mach es jetzt mit einem META-Tag ... das "Problem" bei einer header() Weiterleitung wäre halt, dass der User wartet und wartet und halt "nix" sieht, solange die Emails verschickt werden. User wollen "sehen", das was passiert ... daher geb ich einen Text an a la "Newsletter xx von zz verschickt" ...
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  6. #6
    seb
    seb ist offline
    TP-Veteran seb bringt sich richtig ein seb bringt sich richtig ein
    Registriert seit
    Jan 2002
    Beiträge
    1.741
    Hmmm...Ausgabe vor header() geht ja nicht, stimmt...

  7. #7
    TP-Insider MuschPusch ist auf einem guten Weg Avatar von MuschPusch
    Registriert seit
    May 2002
    Ort
    Niederlande
    Beiträge
    612
    so siehts bei mir aus...


    <!doctype html public "-//W3C//DTD HTML 4.0 //EN">
    <html>
    <head>
    <title>Title here!</title>
    </head>
    <body>
    <?php

    $THISSTART=time();

    // halt ganz am Anfang...


    if ($starte_verschicken !='ja'){exit;}

    $Verteiler_Selecter=$_GET[Verteiler];
    $content=$verteiler[$Verteiler_Selecter];
    $arrID=array();
    $sql = "SELECT ".$content['email_spalte']." AS email FROM ".$content['email_tabelle']." WHERE gueltig != 'nein'";
    $result=my_query ($sql,'');
    while($aID=mysql_fetch_array($result)){
    $arrID[]=$aID[email];

    }

    $nr_of_records=count($arrID);

    if ($STARTID ==""){$STARTID=0;}
    $i=0;
    for($n=$STARTID;$n<$nr_of_records;$n++){
    //$id_nr is gleich die emailadresse!!!!

    $id_nr=$arrID[$n];

    if((time()-$THISSTART )> 25){
    $reload=$PHP_SELF."?STARTID=".($n+1)."&starte_verschicken=ja&Verteiler=".$Verteiler;

    echo "<script language='javascript'>
    self.location='$reload'
    </script>reload...<br>";
    }
    $arr[0]=$id_nr;
    if (check_email ($arr[0])){
    $sql="SELECT max(id) FROM simtent_Newsletter_Archiv_data";
    $result=my_query ($sql,"Select maxIDNewsletter");
    $row=mysql_fetch_array($result);

    $sql="SELECT Newsletter_Archiv,Betreff from simtent_Newsletter_Archiv_data WHERE ID=$row[0]";
    $result=my_query ($sql,"SELECT Newsletter_details");
    $row=mysql_fetch_array($result);
    $i++;


    $stop=$i % 50;
    if ($stop == ''){
    sleep(5); echo "<br>sleep...tzzz"; sleep(2); echo "zzz";sleep(5); echo " woke up...<br>";
    }

    echo "<font color='green'>Mail gesendet an: ".$arr[0]."</font><br>";

    }else{
    $sql = "UPDATE ".$content['email_spalte']." SET gueltig = 'nein'";
    echo "<font color='red'>".$arr[0]." ungültig, nicht versandt!</font><br>";

    }



    }

    if ($STARTID = $nr_of_records){
    echo
    "<tr>
    <td>NEWSLETTER WURDE VERSCHICKT! SIE KÖNNEN DAS FENSTER SCHLIEßEN!!!
    </td>
    </tr>";
    }


    ?>
    </body>
    </html>

  8. #8
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Uh, das ist n bissel lang ... meine funktionierende "Engine" sieht jetzt so aus:

    PHP-Code:
    // 1. Newsletter aus der Datenbank holen und Email-gerecht umwandeln
    $query mysql_query("SELECT nl_title,nl_content FROM newsletter_data WHERE nl_date='".$_SESSION['nl_date']."'",$dbase) or die(mysql_error());
    $daten mysql_fetch_array($query);
    $newsletter=br2break(html2email($daten[nl_content]));

    // 2. Newsletter an User verschicken
    $query mysql_query("SELECT nl_name,nl_email,nl_key FROM newsletter_user WHERE nl_isreg='1' LIMIT ".$_SESSION['limit'].",$newsletter_send_limit",$dbase) or die(mysql_error());
    while (
    $daten mysql_fetch_array($query))
    {
        echo 
    $daten['nl_name']." ".$daten['nl_email']." ".$daten['nl_key']."<br>";
        
    //mail();
    }
    // Check, ob bereits alle Abonennten verarbeitet wurden
    if (($_SESSION['limit']+$newsletter_send_limit) < $_SESSION['anzahl_abo'])
    {
        
    $_SESSION['limit']+=$newsletter_send_limit// Limit erhoehen
        
    $statustext="Bitte warten Sie, die Newsletter werden verschickt: <span class=\"textmittel-rot\">".$_SESSION['limit']."</span> / <span class=\"textmittel-blau\">".$_SESSION['anzahl_abo']."</span> ...";
        
    $url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?".$session;
        
    $special_meta="<meta http-equiv=\"refresh\" content=\"3;URL=$url\">";
    }
    else
    {
        
    $statustext="Der Newsletter wurde erfolgreich an alle <span class=\"textmittel-blau\">".$_SESSION['anzahl_abo']."</span> Abonennten verschickt.";
        unset(
    $_SESSION['anzahl_abo']);
        unset(
    $_SESSION['limit']);
        unset(
    $_SESSION['nl_date']);

    Alles klar?
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  9. #9
    TP-Insider MuschPusch ist auf einem guten Weg Avatar von MuschPusch
    Registriert seit
    May 2002
    Ort
    Niederlande
    Beiträge
    612
    ein wenig kürzer....

    - $nr_of_records is ein array mit allen Ids der Emailadressen (klappt bei über 1000 in unter 2 oder 3 Sekunden).
    - am beginn wird die Zeit ($THISSTART) genommen und so ruft sich das Skript immer mit nem neuen Zeiger auf das array auf... kann somit endlos laufen..


    $nr_of_records=count($arrID);

    if ($STARTID ==""){$STARTID=0;}
    $i=0;
    for($n=$STARTID;$n<$nr_of_records;$n++){

    $id_nr=$arrID[$n];

    if((time()-$THISSTART )> 25){
    $reload=$PHP_SELF."?STARTID=".($n+1)."&starte_verschicken=ja&Verteiler=".$Verteiler;

    echo "<script language='javascript'>
    self.location='$reload'
    </script>reload...<br>";
    }

  10. #10
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Und wenn ein Scherzkeks Javascript abschaltet? Wozu ist dieser Javascript-Link denn?
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  11. #11
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    Wie wäre es, wenn Du noch eine kleine Sicherheit einbaust, inder sich der Newsletter merkt bei welchem Limit-Wert er jetzt steht? Dann kannst du auch bei Userfehlern (schließen des Fensters) den Newsletter fortsetzen

    Gruss Jan

  12. #12
    TP-Insider MuschPusch ist auf einem guten Weg Avatar von MuschPusch
    Registriert seit
    May 2002
    Ort
    Niederlande
    Beiträge
    612
    Hier der Javascriptteil...


    $tmp= $PHP_SELF."?starte_verschicken=ja&Verteiler=$_POST[VERTEILER]"; ?>

    <script>function lade_js(){ self.location='<?PHP echo $tmp; ?>'}</script>
    <title>Newsletter Tool</title>

    Leute die JS abschalten werden gesteinigt... Nein kommt bei mir nicht in Frage weil es Teil von nem CMS is und da brauchste schon öfter JS Funktionen

    @Stuck...

    Hm... müsste ich dann ja in irgend ne DB speichern, wär irgendwie übertrieben...

  13. #13
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    Original geschrieben von MuschPusch
    @Stuck...

    Hm... müsste ich dann ja in irgend ne DB speichern, wär irgendwie übertrieben...
    ...wieso übertrieben? Was machste denn wenn ein Kunde (meist ehh einfach nur Anwender) nach 1000 Mails aus versehen das kleine X-chen oben rechts klickt? Und noch weitere 1000 Mails Fehlen? An alle 1000 Leute nochmals ne' Mail schicken? Was wäre wenn jeder 5te daraufhin bescheid sagt, dass er die Nachricht 2mal erhaltne hat? Das wären 200Mails im Postfach des Kunden... ok, wird vielleicht selten passieren, aber ich denke, soo viel Aufwand ist das nicht, die Sache zu bereinigen!

    ..und nochmal ein paar Sachen die mir aufgefallen sind:
    Es würde auf jeder Seite (sobald der Request etwas länger dauert stehen: "NEWSLETTER WURDE VERSCHICKT! SIE KÖNNEN DAS FENSTER SCHLIEßEN" ...schau mal in die IF-Abfrage davor... hier hätten wir z.B. ein potenzielles mittel das X-chen oben rechts zu klicken

    Kein direkter Fehler, aber bei jedem Seitenaufruf werden ALLE Email-Adressen aus der DB gelesen, und in ein Array gepackt... wozu? übertrieben?

    Das count() auf das Array ist auch überflüssig, da Du den Wert bereits in mysql_num_rows() drin hast. Ok, hier bin ich mir nicht sicher, welche Funktion besser ist.. aber rein logisch gedacht sollte mysql_num_rows() schneller gehen, da die Anfrage ja schon im Speicher hängt.

    ...also es scheinen ja beide Variationen zu laufen. Dennoch würde ich die von Adagio bevorzugen... So in der Art hab ichs auch mal gemacht...
    Soll echt nicht bös' gemeint sein, aber in deinem Script ist soo viel drin, was man echt einfacher lösen kann.

    Also, bis denne
    Jan

  14. #14
    TP-Insider MuschPusch ist auf einem guten Weg Avatar von MuschPusch
    Registriert seit
    May 2002
    Ort
    Niederlande
    Beiträge
    612
    Mit dem in db speichern haste recht hab ich ma wieder um die Ecke gedacht wie auch immer...

    Mit:

    "Es würde auf jeder Seite (sobald der Request etwas länger dauert stehen: "NEWSLETTER WURDE VERSCHICKT! SIE KÖNNEN DAS FENSTER SCHLIEßEN" ...schau mal in die IF-Abfrage davor... hier hätten wir z.B. ein potenzielles mittel das X-chen oben rechts zu klicken"

    haste unrecht... dies erscheint erst wenn das array bis zum ende durchlaufen wurde...


    mysql_num_rows() is wahrscheinlich echt eleganter...

    @adiago

    "- manche Server verschicken die Email nicht, wenn zu viele Empfänger im BCC stehen"

    Was sind zu viele 100? 500? 1000? Haste ungefähr ne Idee...???

  15. #15
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    Original geschrieben von MuschPusch

    "Es würde auf jeder Seite (sobald der Request etwas länger dauert stehen: "NEWSLETTER WURDE VERSCHICKT! SIE KÖNNEN DAS FENSTER SCHLIEßEN" ...schau mal in die IF-Abfrage davor... hier hätten wir z.B. ein potenzielles mittel das X-chen oben rechts zu klicken"

    haste unrecht... dies erscheint erst wenn das array bis zum ende durchlaufen wurde...
    echt? Mir ist da nur aufgefallen, da Du in der IF-Abfrage nicht auf "Gleichheit" prüfst, sondern den Wert zuweist (if ($STARTID = $nr_of_records){), was immer TRUE zurückgeben würde...

    Grussi Jan

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51