Martin Hein: Newsletter

Hallo Forum,

ich habe vor kurzem mal angefangen, mich mit dem Thema
Newsletter auseinander zu setzen und schon ganz gute
Tipps bekommen:

http://forum.de.selfhtml.org/archiv/2008/1/t164429/

Ich stehe aber immernoch vor der Entscheidung, ob ich auf
dem ohnehin schon nicht sehr performanten Webserver, etwas
selbst scripten, oder versuchen soll, ob sich dort eine
Software installieren lässt.

Etwas selbst zu scripten, wäre mir eigentlich lieber, weil
ich mich nicht um eine Schnittstelle zu der Software kümmern
müsste. Jetzt habe ich Zhalen bekommen:

Es geht um 16.000 Empfänger

Ich habe keine Idee, ob das nun viele sind oder nicht. Konkret
frage ich mich, ob das eine Fall für eine Software ist, oder
ich so mit Kanonen auf Spatzen schiessen würde.

Was meint Ihr ?

beste gruesse,
martin

  1. Hi,

    Es geht um 16.000 Empfänger

    Ich habe keine Idee, ob das nun viele sind oder nicht.

    sagen wir es so: Wenn Du an einen Versand mittels PHP denkst, wirst Du bei dieser Menge in *jeden* potenziell gesetzten Timeout laufen. Sofern auf Deinem Server ein solcher eingerichtet ist, ist der Versand also nicht ohne ein sauberes Unterbrechungs-und-Wiederaufnahme-Konzept möglich.

    Konkret
    frage ich mich, ob das eine Fall für eine Software ist, oder
    ich so mit Kanonen auf Spatzen schiessen würde.

    Ich denke, dass man ab einer dreistelligen Anzahl Empfänger über professionelle Software nachdenken sollte, und ab einer vierstelligen Anzahl keinen Gedanken mehr daran verschwenden sollte, ob es sich lohnen könnte. Wenn bei Deinen 16.000 der Punkt also kein Komma sein soll, halte ich die Wahl für getroffen.

    Wenn die Anzahl sechs- bis siebenstellig wird, kannst Du übrigens wieder über die Entwicklung eines eigenen Tools nachdenken ;-)

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. echo $begrüßung;

      sagen wir es so: Wenn Du an einen Versand mittels PHP denkst, wirst Du bei dieser Menge in *jeden* potenziell gesetzten Timeout laufen. Sofern auf Deinem Server ein solcher eingerichtet ist, ist der Versand also nicht ohne ein sauberes Unterbrechungs-und-Wiederaufnahme-Konzept möglich.

      *jeden*? Wenn ein PHP-Script auf der Kommandozeile gestartet wird, ist schon mal die max_execution_time auf 0 gestellt. Es ist also erst einmal keine Beschränkung vorhanden. Diesen Wert kann man zwar im Script wieder ändern, aber sein Startwert lässt sich (am CLI!) nicht durch eine php.ini-Konfiguration einstellen.

      echo "$verabschiedung $name";

      1. Hi,

        sagen wir es so: Wenn Du an einen Versand mittels PHP denkst, wirst Du bei dieser Menge in *jeden* potenziell gesetzten Timeout laufen. Sofern auf Deinem Server ein solcher eingerichtet ist, ist der Versand also nicht ohne ein sauberes Unterbrechungs-und-Wiederaufnahme-Konzept möglich.
        *jeden*? Wenn ein PHP-Script auf der Kommandozeile gestartet wird, ist schon mal die max_execution_time auf 0 gestellt. Es ist also erst einmal keine Beschränkung vorhanden.

        wenn es keinen Timeout gibt, kann da auch nichts reinlaufen. Siehe auch den Begriff "potenziell" sowie den mit "Sofern" beginnenden Satz.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo,

          der PHP-interne Timeout ist IMHO immer die harmlosete Huerde auf einem Shared-Host. Viel restriktiver sind die maximale Anzahl zulaessiger Prozesse je Kundennummer sowie die RAM- und CPU-Begrenzung, die mittlerweile fest in das Server-Management implementiert sind. Hinzu kommt, dass das Freiwerden von Ressourcen nicht sofort nach der Freigabe selbiger erkannt wird, sondern sehr zeitverzoegert. D.h. man killt einen Prozess, um einen neuen starten zu koennen, aber muss warten, bis der Obermacker das Killen auch mitbekommen hat. Das ist wirklich nicht sehr optimal geloest (aber nur fuer den Kunden ... ;)

          Gruss und Dank
          Norbert

        2. echo $begrüßung;

          wenn es keinen Timeout gibt, kann da auch nichts reinlaufen. Siehe auch den Begriff "potenziell" sowie den mit "Sofern" beginnenden Satz.

          Mir sind die Einschränkungen in deiner Formulierung sehr wohl aufgefallen, doch insgesamt hinterließ sie bei mir ein wenig den Eindruck, dass es generell ein unumgängliches Timeout gäbe.

          echo "$verabschiedung $name";

    2. Hallo Cheatah,

      Ich denke, dass man ab einer dreistelligen Anzahl Empfänger über professionelle Software nachdenken sollte, und ab einer vierstelligen Anzahl keinen Gedanken mehr daran verschwenden sollte, ob es sich lohnen könnte. Wenn bei Deinen 16.000 der Punkt also kein Komma sein soll, halte ich die Wahl für getroffen.

      Mit dem Punkt ist tatsächlich das deutsche Tausender-Trennzeichen
      gemeint. Die Entscheidung fällt also in dem Fall nach deinem
      Dafürhalten auf eine professionelle Software. Gibt's da einen
      persönlichen Favoriten für Dich?

      danke und

      beste gruesse,
      martin

  2. Hallo Martin,

    Was meint Ihr ?

    hmm,
    auf einem WebSpace bei 1&1 habe ich problemlos mehrere tausend
    Mails versendet ohne in eine der strengen Restriktionen zu geraten.
    Konzept:

    • Man generiert fuer jede Mail eine Textdatei, die dem Quellcode
        einer ueblichen Mail entspricht, sind auch nur Textfiles, egal
        ob mit Attachement, HTML oder Plain Text.
    • Diese Textdateien speichert man in einen eigenen Ordner unter
        der Mail-ID, und vergisst sie.
    • jede Minute startet ein Cron-Job, der in diesen Ordner schaut
        ob da was zu versenden ist, falls JA, macht er dies, loescht
        die Datei und schaut auf die Uhr um sich bei Ueberschreitung
        von 25 Sec definiert zu beenden.
    • naechste Minute passiert das Gleiche. Sind keine Mails mehr
        im Ordner hoert der Job eben sofort auf.
    • bleibt die Frage, wie man in den 25 Sekunden moeglichst viele
        Mails versenden kann:
        - via php-Mail kann man vergessen, viel zu traege
        - bleibt php-popen (nicht mit poppen verwechseln ;)
    <?php  
    $MTA = ini_get('sendmail_path');  /* Mail Transfer Agent */  
    function my_sendmail($path4mail) {  
        global $MTA;  
        $fp = popen($MTA, 'w');  
        $wr = fputs($fp, file_getcontents($path4mail));  
        $cl = fclose($fp);  
    }  
    ?>
    

    Schon der erste Test wird zeigen, dass man via popen() zig-mal so
    viele Mails versenden kann, wie mit der Mail-Funktion von PHP.

    Gruss und Dank
    Norbert

    1. Hallo!

      Du schreibst mal eben 16.000 Dateien auf die Platte (wenn man beim obigen Beispiel bleibt)? Aufwändiger gehts doch wohl kaum...

      Gruß,
      Manu

      --
      Deutschland ist einfach von einer Diktatur der Nationalsozialisten zu einer Diktatur der Gutmenschen übergegangen.
      1. Hallo Manu,

        Du schreibst mal eben 16.000 Dateien auf die Platte (wenn man beim obigen Beispiel bleibt)?
        Aufwändiger gehts doch wohl kaum...

        wieso,
        was vermutest Du macht eine Newsletter-Software ... ?
        Es schreibt die Mails in ein Queue und versendet sie dann. Allerdings
        macht man sich hier die Muehe Mailbody und Mailheader in verschiedene
        Ordner zu schreiben.
        Den Aufwand habe ich mir gespart ... ;-)

        Gruss und Dank
        Norbert

        1. Interessanter Ansatz, werd ich beizeiten mal ausprobieren...
          Ich bin davon ausgegangen,d ass sendmail dasselbe nocheinmal macht...

          Gruß,
          Manu

    2. Hallo Norbert,

      das hört sich alles ganz schlüssig an und wenn Du das
      genauso machst, funktiniert's ja definitiv. Ich will
      mal resumieren, wie ich das verstanden habe:

      1. ich erstelle 16.000 Textfiles und lege sie in ein Verzeichnis.
      2. ich definiere einen Cronjob, der:
         - jede volle Minute gestartet wird.
         - dann, wenn in dem Verzeichnis ein Textfile liegt,
           dass dann als Mail verschickt, löscht und das
           Spiel wiederholt.
         - dann, wenn in dem Verzeichnis nichts liegt abbricht.
           oder, wenn er 25 Sekunden läuft abbricht.

      Das heisst, dass in dem Moment, wo die Files i.d. Verzeichnis
      abgelegt werden, startet der Versand (bzw. man definiert den
      Cronjob so, dass er z.B. nur innerhalb eines Zeitfensters läuft).

      Einer Frage zu 1.:
      ------------------
      ist es unproblematisch (in einer Schleife) 16.000 Files anzulegen ?

      Was in der txt drinsteht, kann ich mir auch noch nicht vorstellen,
      aber das sollte sich herausfinden lassen ;)

      danke und

      beste gruesse,
      martin