Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Viele Mails versenden mit "puffer" ?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Viele Mails versenden mit "puffer" ?

    Halllooo zusammen =)

    Ich habe vorhin hier im Forum schon ein wenig rumgeschaut, jedoch nicht wirklich etwas passendes gefunden. Sollte ich etwas überlesen haben, entschuldigt dies bitte.

    Ich bin zwar kein wirklicher Anfänger mehr, was PHP angeht, jedoch komme ich einfach nicht weiter. Ich habe ein Newsletterscript geschrieben, was Mails an User schickt, die in der Datenbank gespeichert sind.

    Bei mir werden es zur Zeit immer und immer mehr User die ein Newsletter abonniert haben (ca. 3.500 User) Ich möchte meinen Server nicht unnötig herausfordern indem alle 3.500 Mails auf einmal geschickt werden.

    Daher habe ich bereits danach gesucht, wie ich einen "puffer" einbauen kann, sodass z.B. alle 5 Minuten 50 Mails abgeschickt werden. Je nachdem was nen Server so alles aushält. Die E-Mail ist keine Text-Mail sondern eine HTML-Mail. Jedoch weiß ich nicht wie ich soetwas realisieren kann. Am besten wäre es, wenn eine Leiste zu sehen wäre mit dem aktuellen "Stand", wie viele Mails bereits verschickt worden sind und wie viele noch "warten".

    Gelesen habe ich ebenfalls schon, dass man es mit der DB machen könnte. Wie gesagt weiß ich aber leider nicht, wie ich das realisieren kann. Wenn einer mir sagen könnte, wie ich soetwas hinbekomme, ohne den Server wirklich zu belasten, hab ich schonmal ein problem weniger =)

    Vielen Dank schonmal für evtl. Hilfestellungen.

  • #2
    Mach die Abarbeitung des Mailversands mit einem eigenen Worker-Prozess (kann auch ein PHP-Cronjob sein) und nicht direkt aus dem Webinterface heraus. Die Mail-Warteschlange in einer Datenbank abzulegen ist eine Möglichkeit und an an sich keine besondere Herausforderung. Was musst du noch wissen?

    Kommentar


    • #3
      Hi,

      danke für deine Antwort. Also ich weiß nicht wie ich das im "Code" realisieren kann. Ich möchte ja nicht, dass alle Mails auf einmal versendet werden, sondern in einem Intervall von vielleicht 5 Min â 50 oder 100 Mails.

      Also das Problem was ich habe ist, dass ich nicht weiß, wie ich eine Mail-Warteschlange mir zurecht basteln kann.

      Kommentar


      • #4
        Die Frage ist immer noch sehr allgemein, fertigen Code wirst du hier nicht bekommen. Hast du das Prinzip denn verstanden?

        Nochmal, die einfache Variante mit Cron+DB:

        via Webinterface: 3500 Mails vorbereiten und in Datenbank ablegen (Minimum an Daten: Empfänger, Inhalt, versendet=0)
        minütlich via Cron: hole X Mails mit versendet=0 aus DB, verschicke sie, bei Erfolg update auf versendet=1

        Kommentar


        • #5
          Deswegen hat fab ja u.a. von einem Cronjob gesprochen.

          Denkanstoß:
          Newsletterstart -> Alle E-Mails (IDs) werden in eine Tabelle geschrieben. Es wird eine Cronjob Datei eingerichtet mit einem Intervall von 5 Minuten.

          In der Cronjob Datei hast Du einfach eine SELECT-Abfrage aus der Tabelle wo deine ganzen E-Mails drin stehen. Der SELECT-Abfrage kannst Du ein LIMIT 50 setzen. Auf diese Weise ist gewährleistet, dass alle 5 Minuten nur maximal 50 Mails rausgehen.

          Und jede Mail, die rausgeht, muss dann auch in der Tabelle gelöscht werden. So ist gewährleistet, dass keine Mail doppelt raus geht.

          *Update*: Ok, da war fab wieder schneller, aber das Prinzip ist zumindest ähnlich

          Kommentar


          • #6
            Huhu.

            Perfekt, so habe ich es verstanden

            Und das ich keine Codevorlage bekomme, ist mir klar und auch nicht mein Ziel gewesen

            Danke euch beiden =)

            Kommentar


            • #7
              Alternativ: http://pear.php.net/package/Mail_Queue

              Kommentar


              • #8
                Hab dann nochmal eine kleine Frage:

                Wie viele DB Einträge hält eine Tabelle eigentlich im Durchschnitt aus? Wäre es für die DB ein Problem 100.000 Einträge gleichzeitig zu erstellen?

                Kommentar


                • #9
                  100.000 Einträge sind nichts... Reden wir von MySQL? Gedanken musst du dir da erst im Gigabyte-Bereich machen, Probleme gibt es möglicherweise im Terabyte-Bereich:

                  http://dev.mysql.com/doc/refman/5.1/de/table-size.html

                  Kommentar


                  • #10
                    Ich sag nur, ich hab das Limit einer MySQL Tabelle noch nicht erreicht..

                    mein "doof guck"-case bisher:
                    Code:
                    MySQL MST-Peering Cluster ( Enterprise Grid )
                    - Einsatz: pre-calculation array, ultra scale math operations
                    - Environment: nVidia TESLA, ubuntu 9.10
                    
                    backup table: ~12 Billionen (!)
                    daily: ~104 Millionen
                    
                    virtual memory: 512 GB
                    virtual harddisk: 1,5 EB
                    Gott sei dank bin ich an der Kiste kein Admin

                    Kommentar


                    • #11
                      Wow.... Okay, mit so viel hätte ich nicht gerechnet ^^ und ja wir reden von MySQL =D

                      Dann noch eine gaaanz kleine Frage am Rande. Wie kann ich z.B. meine Tabelle bzw. meine Datenbank testen, wie viel diese aushält. Gibt es da evtl. nen SSH Befehl?

                      Kommentar


                      • #12
                        Befüll sie bis deine Festplatte voll ist, dann sagt auch mysql "OUT OF ORDER", versprochen.

                        Kommentar

                        Lädt...
                        X