Cronjob für Erinnerungsemail

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

  • Cronjob für Erinnerungsemail

    Ich betreibe eine Tipprunde.
    Ich erinnere momentan manuell alle Tipper 2 Tage vor dem Spieltag, die noch keinen Tipp für den nächsten Spieltag abgegeben haben. Das möchte ich mittels Cronjob automatisieren. Also, habe ich ein php-Skript geschrieben, das folgendes tut:
    - Datenbank auslesen und anhand der Spieltagsdaten ermitteln, welches der nächste Spieltag ist.
    - Von diesem Datum 2 Tage abziehen als Erinnerungszeit.
    - Abfrage, ob die Erinnerungszeit überschritten ist.
    - Falls ja: Erinnerungsemail schicken an alle, die noch nicht getippt haben.

    Soweit so gut.
    Wenn dieses Skript aber als Cronjob läuft, dann läuft es meinem Verständnis nach immer wieder nacheinander ab. Das bedeutet natürlich, dass in den beiden Tagen vor dem Spieltag dann ständig Erinnerungsemails verschickt werden, da ja die Abfrage (s.o.) bejaht wird, sobald weniger als 2 Tage verbleiben. Erst wenn der nächste Spieltag ermittelt wird ist wieder Ruhe.

    Ich habe versucht eine Feldvaraible anzulegen, die gesetzt wird, falls erstmals eine Email geschickt wird (sollte Mehrfachverendung verhindern).
    Funktioniert aber nicht.

    Habt Ihr eine zündende Idee, wie ich dem Problem Herr werde?

    Danke im Voraus und Gruß

    Unleaded

  • #2
    Ich versteh das nicht so wirklich.

    Sagen wir mal, du lässt den Cronjob jeden Tag um 12 Uhr laufen.

    Das Script schaut ob die Zeit den Korridor von Datum des Spieltags - 2 Tage erreicht hat und ob für den aktuellen Spieltag noch kein Newsletter versendet wurde.

    Sollte die Zeit passen und der Newsletter noch nicht versendet worden sein, wird er verschickt.

    Nach dem Versand, solltest du das Flag in der Datenbank auf den nächsten Spieltag setzen.

    Wo ist das Problem?

    Kommentar


    • #3
      In der datenbank stehen die Spieltage mit ihrem Abgabetermin.
      Würde der Cronjob jetzt jeden Tag um 12:00 laufen, dann würde 2 tage vor dem Spieltag das script laufen und die Erinnerungsemails auf den Weg geschickt.
      Am nächsten Tag um 12:00 würde wieder abgefragt, immer noch für den selben Spieltag, da dieser ja im script als nächster ermittelt wird, und wieder eine Erinnerungsemail verschickt.
      Das möchte ich verhindern.

      Kommentar


      • #4
        wenn Datum == 2 Tage vor Tipdatum und noch kein flag für gesendete mail vorhanden ist, dann mail an Hugo und Bruni laut db versenden...

        Bisserl schick machen und natürlich auf Deine Gegebenheiten anpassen.
        Im Kern würd ich meine Überlegungen darauf aufbauen.
        Und ist man alt wie ein Kuh, lernt man immer noch dazu.
        THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia

        Kommentar


        • #5
          Die Frage ist halt nur, wie das mit dem Flag realisiert werden kann.
          Es soll ja gesetzt werden, wenn die emails verschickt wurden (2 Tage vor dem Spieltag) und dann wieder zurück genommen werden, wenn der bewusste Spieltag stattgefunden hat, da ja dann für den nächsten Spieltag erinnert werden soll.

          Deshalb hatte ich eine Feldvariable eingebaut als Flag (z.B. $email_verschickt[x]). Läuft aber nicht, selbst wenn ich die Variable als global anlege.

          Andere Ideen?

          Kommentar


          • #6
            Hi,

            mach es doch so wie schnoop es geschrieben hat.
            Du hast neben den informationen wann ein spieltag ist, eine
            weitere tabelle in der jeweils der nächste erwartete spieltag
            eingetragen ist.
            Dein script macht dann folgendes:
            pseudocode
            Code:
            next_remind_date = get_next_remind_date()
            if now >= next_remind_date then
                 foreach address in list do
                     mail(address)
                 end foreach
                 next_date = get_next_available_date()
                 update_next_remind_date(next_date)
            end if
            get_next_remind_date() holt den wert aus der tabelle in der
            nur der nächste erinnerungstag gespeichert ist.

            get_next_available_date() ermittelt den spieltag der als nächstes
            an der reihe ist.

            Man kann das ganze natürlich auch in einer tabelle machen
            mit etwa folgendem schema:

            id|date|is_next

            Und dann nachdem man gemailt hat, "is_next" des aktuellen tages
            auf false setzen und "is_next" des nächsten spieltages auf true.

            Dann selectierst du immer nur das datum dessen "is_next" feld
            auf true steht.

            greets
            (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

            Kommentar

            Lädt...
            X