Mailer

** 17:27 To byl zase dneska den. Nejen že mám dneska třicítku, ale v práci jsem dost máknul na systému rozesílání mailů zákazníkům. Vlastně to funguje tak, že mám tabulku v databázi do které házím data, které si vybere PHP script spouštěný přes cron na localhostu každou minutu. Vždycky to ale může poslat maximálně 10 zpráv za jedno spuštění a je tam 2 vteřiny pauza mezi odesíláním.

Celkem jednoduchá věc, jen to vymyslet a napsat. Všechno to frčí rovnou přes SMTP na mailák, takže žádný pseudo rozesílání přes lokální webserver atd...

Co mě docela mile překvapilo, byla aktuální verze PHPmaileru který k tomu používám. Naposledy jsem se s ním setkal kdysi dávno; je to možná už 4 roky zpět a tehdy to bylo děravý jak cedník. Teď jsem na to koukal a je z toho celkem snadno použitelný a komplexní nástroj. Bude docela sranda s tím pracovat.

Každopádně: abych se vrátil k meritu věci. Do databáze stačí zapsat ID zákazníka (není nutné), email příjemce, předmět mailu a obsah mailu. Dál se tam automaticky (díky AUTOINCREMENT) přiřadí GUID (unikátní ID) což používám hlavně pro určení posloupnousti zpráv při dosažení limitu "per_hit". Při zápisu do DB se rovněž uloží datum a čas kdy to bylo zadáno. V neposlední řadě ta tabulka obsahuje sloupec "sent", který určuje, jestli byl mail už odeslán (1) nebo čeká na odeslání (0) a nebo jestli to selhalo (-1). To tam mám pro to, aby se mi to nezacyklilo, páč je jasný, že pak byc to každou minutu odesílalo dokola prvních 10 mailů, který to v databázi najde. A to fakt nechceš.

Teď mi vlastně stačí vložit do databáze co chci odeslat (a komu) a během cca dvou minut se to doručí. Tím se kulantně vyhnu složité implementaci zasílání mailů v Nette. Nevím čím to přesně je, ale to zasílání mailů z Nette frameworku mi prostě nesedí. A co víc? Já potřebuju zpětně kontrolovat co přesně se komu odeslalo a kdy, a taky jestli vůbec. Moje řešení mi nabízí obojí: pohodlnost a možnost zpětné kontroly prohlížením historie v databázi.