schildi: massenversand mails per cron

hallo

ich bin beim letzten abschnitt meines newslettersystems.
gleichzeitig ist das auch der - für mich - schwierigste teil:

da ja tausende von mails verschickt werden müssen (50.000 könntens schonmal werden) muss ich mir ein script schreiben das mir die emails scheibchenweise rausschickt über einen längeren zeitraum (1-max.2 tage?).

vorab: php version ist 4.3.x und server läuft im safemode.

ich hatte mir überlegt, dass es doch möglich sein müsste per php einen unix-cronjob zu erzeugen, der mir evtl. auch sekündlich (?) ein php-script ausführt, welches dann eine mail verschickt, um den server nicht zu überlasten.

ich hab bloß keine ahnung wie ich das anstelle :|

viell. gibt es auch noch andere gute ansätze?

bin dankbar für jede hilfe!

  1. Moin!

    ich hatte mir überlegt, dass es doch möglich sein müsste per php einen unix-cronjob zu erzeugen, der mir evtl. auch sekündlich (?) ein php-script ausführt, welches dann eine mail verschickt, um den server nicht zu überlasten.

    Ein Cronjob ist ein einmal fest eingerichtetes Programm (kompiliert oder Skript), welches in regelmäßigen Abständen durch das cron-Programm aufgerufen wird. Mindestabstand eine Minute.

    ich hab bloß keine ahnung wie ich das anstelle :|

    Dazu benötigst du mindestens mal die Rechte, cronjobs anzulegen. Ob PHP das alleine darf, ist mehr als fraglich, zumindest wenn du unter dem safemode leidest. Denn das bedeutet meist, dass du shared hosting hast. Und das bedeutet wieder, dass du dich in der Tat nicht einfach so an Ressourcen vergreifen darfst - und dass es dir möglicherweise auch nicht erlaubt ist, massenhaft Mails zu versenden.

    Die Frage, die du dir stellen mußt: Bietet dein Provider dir Cronjobs an, oder nicht?

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. hallo!

      Die Frage, die du dir stellen mußt: Bietet dein Provider dir Cronjobs an, oder nicht?

      es handelt sich um einen gemieteten server mit root-zugriff.
      ..mm fragt sich dann wie man das am besten machen würde minütlich..

      1. Moin!

        Die Frage, die du dir stellen mußt: Bietet dein Provider dir Cronjobs an, oder nicht?

        es handelt sich um einen gemieteten server mit root-zugriff.

        Sag das doch gleich. Warum dann PHP im Safemode? Hm.

        ..mm fragt sich dann wie man das am besten machen würde minütlich..

        Schon mal das Handbuch zu deinem installierten Cron-Dienst konsultiert?

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Schon mal das Handbuch zu deinem installierten Cron-Dienst konsultiert?

          naja, mir gehts erst einmal auch um die kommunikation zw. php und unix. wie gehe ich da am besten vor - im safe mode .
          und evtl. ideen/anregungen, wie man das prinzipiell lösen könnte, das problem mit dem massenversand..
          bis morschn :(

          1. Hallo schildi

            naja, mir gehts erst einmal auch um die kommunikation zw. php und unix. wie gehe ich da am besten vor - im safe mode .

            Guck Dir doch mal php-cli an. Du kannst dir dafür eine extra php.ini erstellen ohne safe-mode.

            Gruß

            Krueger

            1. echo $begrüßung;

              naja, mir gehts erst einmal auch um die kommunikation zw. php und unix. wie gehe ich da am besten vor - im safe mode .

              Guck Dir doch mal php-cli an. Du kannst dir dafür eine extra php.ini erstellen ohne safe-mode.

              *Zustimm*. Mit PHP lassen sich auch Scripte schreiben, die vom CLI (Command Line Interface) ausgeführt werden. Um ein Script im Webserver laufen zu lassen benötigt man auch einen HTTP-Request. Das ist jedoch unnötig, wenn man das Script von der Kommandozeile ausführen lassen kann. Der große Vorteil dabei ist, dass das Script dann auch keinem zeitlichen Limit mehr unterliegt.

              Literaturtipp: Using PHP from the command line

              echo "$verabschiedung $name";

              1. danke für den tip.

                ich habe mir das mal angeschaut.
                einsatz von cli wäre dann praktisch von nutzen, wenn ich eben ein script mit cron starten will.

                nur - wie arbeite ich am besten in die andere richtung? das heisst, wie kann ich von php aus (im safemode) einen cronjob erzeugen, und diesen auch von dem script, welches dieser cronjob x mal aufruft, bis ein bestimmter fall eintritt (hier: alle emails versendet) auch wieder löschen?

                hoffe meine erklärung ist verständlich.

                danke!

                1. nachtrag / verbesserte erläuterung, was ich eigentlich will:
                  [...] wie kann ich einen cron aufgrund eines http-requests von php aus starten - also user drückt button "newsletter senden" - cron wird erzeugt - läuft solange bis alle mails verschickt. wird dann von dem script, welches die mails verschickt wieder gelöscht. [...]

                  das war meine idee..

                  1. Moin!

                    nachtrag / verbesserte erläuterung, was ich eigentlich will:
                    [...] wie kann ich einen cron aufgrund eines http-requests von php aus starten - also user drückt button "newsletter senden" - cron wird erzeugt - läuft solange bis alle mails verschickt. wird dann von dem script, welches die mails verschickt wieder gelöscht. [...]

                    Warum in der Cron-Konfig rumfummeln? Bau dir einen Cronjob, der nachguckt, ob Mails zu verschicken sind. Wenn nein, beendet sich das Skript, ansonsten nimmt es sich einen Teil der Mails vor und steckt die in den Mailserver hinein.

                    - Sven Rautenberg

                    --
                    "Love your nation - respect the others."
                    1. Warum in der Cron-Konfig rumfummeln? Bau dir einen Cronjob, der nachguckt, ob Mails zu verschicken sind. Wenn nein, beendet sich das Skript, ansonsten nimmt es sich einen Teil der Mails vor und steckt die in den Mailserver hinein.

                      • Sven Rautenberg

                      STIMMT.

                      Allerdings wäre es schön, wenn das Script inital gestartet wird, dass dann dieser Cronjob automatisch 1x angelegt wird. Damit mans nicht manuell machen muuss.

                      1. Moin!

                        Allerdings wäre es schön, wenn das Script inital gestartet wird, dass dann dieser Cronjob automatisch 1x angelegt wird. Damit mans nicht manuell machen muuss.

                        Du hast einen Root-Server. Administrative Tätigkeiten wie Konfiguration von Systemen ist nichts, was typischerweise skriptgesteuert programmiert wird. Weil's vermutlich komplizierter ist, die automatische Installation des Cronjobs zu programmieren, anstatt ihn einfach mal eben kurz manuell einzurichten.

                        Allein das Programmieren des Mailskriptes wird ja schon aufwendig genug.

                        - Sven Rautenberg

                        --
                        "Love your nation - respect the others."
                2. echo $begrüßung;

                  wie kann ich von php aus (im safemode) einen cronjob erzeugen, und diesen auch von dem script, welches dieser cronjob x mal aufruft, bis ein bestimmter fall eintritt (hier: alle emails versendet) auch wieder löschen?

                  Wenn die Sache einmalig stattfindet wäre ein at-Job angebrachter als ein cronjob.
                  Prinzipiell lassen sich solche Unix-Kommandos starten, indem man sie aufruft. Dazu gibt es unter PHP die Program Execution Funktions. Aber ob du die im Safemode aufrufen kannst, ...
                  Den Rest müsstest du aus der Dokumentation zum installierten cron/at-Paket entnehmen. Vermutlich musst du mit Dateinen hantieren.

                  echo "$verabschiedung $name";