Slanje e-mailova iz aplikacije, paralelno ili ne?

Single Sign On (SSO)
maj 23, 2016
10 Print- Prvi deo
jul 6, 2016

U svom dosadašnjem radu sam se susreo sa problemom slanja velike količine emailova kroz aplikaciju. Odmah sam imao neku zamisao paralelnog slanja, jer sam u sebi pomislio: nema smisla da aplikacija ili servis stoji dok se jedan mail procesuira, slanje kroz SMTP client je ionako dugotrajan proces uslovno rečeno – trajaće bar nekoliko sekundi po jednom mailu.
Pronašao sam rešenje sa kojim možete slati paralelno veliku količinu emailova, a praktično aplikacija neće biti „zaglavljena“. Rešenje bi izgledalo otprilike ovako.
Naša klasa MailSender će imati privatne promenljive:

Takođe, ovaj metod će se pokretati u konstruktoru  klase:

Ovaj metod će napraviti onoliko klijenata koliko smo podesili u nekom appconfig-u.
Moj predlog je da se koriste različiti email nalozi. Zašto? Zato što ukoliko koristimo npr neki od google (gmail) naloga, u tom slučaju smo ograničeni na slanje npr 100-tinak mailova. Ukoliko otvorimo 5 naloga, i svaki mail pošaljemo sa drugim nalogom, onda već možemo poslati npr 500 mailova dnevno. Takođe, postoji ograničenje i u količini podataka koju možemo poslati sa jednog naloga u toku dana. U mom slučaju, svi nalozi imaju isti password što naravno ne mora biti slučaj.

Ovo je metod za paralelno slanje emailova, ali imajte na umu da on nije optimizovan, tj on uzima smtp client koji mu prvi dopadne „pod ruku“.

Ovo je glavna metoda koju pozivamo za paralelno slanje pripremljenih emailova:

Metoda za uništavanje klijenata…

I konačno, metoda koja se poziva prilikom paralelnog izvršavanja:

Kao što vidite, ova metoda neće pozivati uvek sledeći SMTP klijent, već prvi koji je slobodan. Što bi bilo u redu, da ne postoji već pomenuto ograničenje kod popularnih SMTP servisa. Takođe, ovde je neophodno pripremiti I sve objekte za slanje, a ja nisam siguran koliko će ovakvih mailova biti? Da li će biti dovoljno memorije za sve mailove I sve njihove attachmente? Nisam bio siguran, a nisam hteo da rizikujem. Tzv sekvencijalno slanje emailova će biti jedan-po-jedan ali sam bar siguran da će posao biti odrađen kako treba.
Na sledeći način sam napravio slanje emailova jedan po jedan, ali da se SMTP klijenti uzimaju po redu.

Ukoliko imate manji broj mail-ova dnevno, u jednom pozivanju metode, sa poznatim brojem i veličinom attachmenta, možda je paralelno slanje mail-ova pravi način za vas. Ukoliko ovo nije slučaj, možete koristi i slanje jedan-po-jedan.

Vladimir Starčević

Senior Developer