Temat: jaki plugin, nahoMail?
Adam W.:
jakby jednak ktoś miał coś lepszego w swoich zasobach to temat jest jak najbardziej otwarty i można się podzielić:>)
Jeśli chodzi o batchowe wysyłanie maili, to robiłem to jeszcze w SF1.0 w sfMail.
Zmodyfikowałem nieco klasę sfMail (dokładniej metodę send()), żeby zamiast wysyłać meiale, to serializowała obiekt phpMailer i wstawiała go do bazy danych. Dodatkowo wrapper serializujący i wstawiający do bazy podnosi flagę (w pamięci), że w kolejce pojawił się mail.
Po stronie klienta to wszystko.
Na serwerze działa cron, który odpala się co minutę i sprawdza, czy jest podniesiona flaga. Jeśli jest to wpada w następującą pętle:
1. Dopytaj bazę czy jest mail do wysłania (poprzez SELECT FOR UPDATE z LIMIT 1, żeby zablokować rekord).
2. Jeśli jest to wysyła maila, jeśli nie to opuszcza flagę.
3. Dopóki w tablicy są maile do wysłania to wracamy do punktu 1.
4. Jeśli nie ma maili do wysłania, to opuszczamy flagę.
Oczywiście do tego trzeba zrobić watchdoga, który sprawdz, czy oby w kolejce nie pojawia się za dużo maili, co mogło by świadczyć o tym, że coś się popsuło, ale nawet w takiej sytuacji wystarczy zerstartować kolejkę i wszystkie maile zostaną wysłane.
Przetestowane i działa bezproblemowo nawet jeśli user wysyła ponad 1000 maili jednocześnie.
Aleksander Wons edytował(a) ten post dnia 14.08.09 o godzinie 17:56