Autor Zpráva
marau
Profil
Dobrý den,
řeším problém s newsletterm, který jsem vytvářel na přání jednoho klienta. V datábázi je zhruba 15tis emailů, klient se přihlásí do administrace, vytvoří newsletter (upraví text v HTML šabloně) a následně je newsletter rozesílán přes script, který spouští cron. Mám ale jistý problém. Občas se totiž stane že email příjde 2x nebo i vícekrát (tak 1 z 5). Script funguje následovně:
1) Spuští se každou minutu
2) Načtou se emaily a ty jsou následně rozesílány (vše probíhá přes smtp na vlastnim serveru)
3) Odešle se email a pak je 5s pauza přes sleep()
4) limit emailů za minutu je nastaven na 10

I tak se ale stává, že nékteré emaily chodí vícekrát. Nesetkal jste se s tím někdo? Díky.
bohyn
Profil
marau
I tak se ale stává, že nékteré emaily chodí vícekrát.
Pravdepodobne je chyba v tom jak kontrolujete jestli na dany e-mail jiz byl odeslan newsletter a na nektere maily se posle znovu.
marau
Profil
marau
„I tak se ale stává, že nékteré emaily chodí vícekrát.“
Pravdepodobne je chyba v tom jak kontrolujete jestli na dany e-mail jiz byl odeslan newsletter a na nektere maily se posle znovu.

No právě že tohle nekontroluju vůbec, používám k odesílání PHPmailera a prostě to pošlu přes $mailer->send(). Podle mých zkušeností to občas vrátí false i když je email odeslán. Emaily chodí všechny, problém je spíš v tom, že chodí vícekrát. To, že by se email v databázi nacházel vícekrát je nemožné (UNIQUE index).
bohyn
Profil
marau
No právě že tohle nekontroluju vůbec

Protom je problem v tomto:
1) Spuští se každou minutu
2) Načtou se emaily a ty jsou následně rozesílány

Bezi vice scriptu ktere rozesilaji maily aniz by kontrolovaly co ktery dela.
marau
Profil
Bezi vice scriptu ktere rozesilaji maily aniz by kontrolovaly co ktery dela.

Tohle je taky vyloučeno. Cron má za úkol spustit script každou minutu, v php scriptu je ještě kontrola na to, aby se script spuštěl opravdu každou minutu:
1) z databáze se zjistí čas posledního spuštění scriptu
2) pokud poslední spuštění proběhlo před méně než minutou, script se ukončí
3) zapíšu aktuální čas
4) rozesílám newsletter
5) po každém odeslaném emailu uložim jeho stav jako odeslaný

není třeba možné že je někde chyba v emailové frontě na smtp?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: