Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

Odesílání tisíců emailů v PHP včetně malé přílohy

Hitman1
verified
rating uzivatele
(38 hodnocení)
28. 3. 2017 22:50:35
Dobrý večer,
řeším odesílání newsletteru pomocí PHP mail() vč. odeslání malé přílohy (asi 5kB).
Mám postavený script, který cyklem prochází uživatele v DB u každého vyplní specifické údaje, přiloží příslušnou (vždy jinou) přílohu a odešle.
Mohl by být problém při rozesílání řekněme tisíců emailů v jeden den?
Vím že je omezení na hostingu, to předpokládám půjde navýšit, ale zajímá mě zejména:
1) Vypršení limitu pro běh scriptu. Pokud cyklus bude probíhat řekněme 10 000x (exterém, ale dejme tomu) předpokládám že to bude trvat nějakou dobu - může to být problém? Jak se to řeší u souboru který může běžet třeba 2 minuty? (odhad, netuším jak dlouho se odesílá jeden email s 5kB přílohou...)
2) Může dojít k nějaké blokaci, přidání na spam list při odeslání takového množství v jeden den? Vše budou vyžádané zprávy na odsouhlasené emaily..
28. 3. 2017 22:50:35
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270328
Při takovém počtu nemáte šanci to rozeslat. Vykoledujete si tím blokaci IP adresy. A navíc například seznam Vás blokne velice rychle.
Pro rozesílání newsletteru používejte služby, které to mají vyřešené, například mailchimp
28. 3. 2017 22:57:35
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270327
Martin Bárta
verified
rating uzivatele
(28 hodnocení)
28. 3. 2017 22:58:22
Napsal Hitman1;1376089
Dobrý večer,
řeším odesílání newsletteru pomocí PHP mail() vč. odeslání malé přílohy (asi 5kB).
Mám postavený script, který cyklem prochází uživatele v DB u každého vyplní specifické údaje, přiloží příslušnou (vždy jinou) přílohu a odešle.
Mohl by být problém při rozesílání řekněme tisíců emailů v jeden den?
Vím že je omezení na hostingu, to předpokládám půjde navýšit, ale zajímá mě zejména:
1) Vypršení limitu pro běh scriptu. Pokud cyklus bude probíhat řekněme 10 000x (exterém, ale dejme tomu) předpokládám že to bude trvat nějakou dobu - může to být problém? Jak se to řeší u souboru který může běžet třeba 2 minuty? (odhad, netuším jak dlouho se odesílá jeden email s 5kB přílohou...)
2) Může dojít k nějaké blokaci, přidání na spam list při odeslání takového množství v jeden den? Vše budou vyžádané zprávy na odsouhlasené emaily..
Problém může být ale nemusí. Základem je DKIM, SPF nebo i DMARC. Rozesílání nejlépe z více IP adres a do nějakého limitu pro daného provozovatele schránek.
Já každopádně od nějaké doby rozesílám už jenom přes Amazon SES všechny e-maily a nemůžu si stěžovat - vyřeší toho dost za tebe. Dříve jsem měl taky script PHP a ten v jednom cyklu odesílal určité množství e-mailů. Je dobré hlídat aby se z jedné IP nepřekročil limit poskytovatele na množství e-mailů za určitý časový úsek.
28. 3. 2017 22:58:22
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270326
aheadnology
verified
rating uzivatele
28. 3. 2017 23:32:03
Timeout lze řešit různě. Např. ta php stránka odešle jen 200 emailů a po nějaké době sama sebe refreshne (lze i bez JS pomoci meta http-equiv="refresh" )
28. 3. 2017 23:32:03
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270325
David Musil
verified
rating uzivatele
(68 hodnocení)
28. 3. 2017 23:41:59
Napsal aheadnology;1376100
Timeout lze řešit různě. Např. ta php stránka odešle jen 200 emailů a po nějaké době sama sebe refreshne (lze i bez JS pomoci meta http-equiv="refresh" )
To jsme delali v pate tride :)
Ten skript pobezi jako cron, odesle treba 200 emailu a pak se sam ukonci. A za 5 minut se treba pusti zase a pojede tam, kde skoncil.
28. 3. 2017 23:41:59
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270324
Peter.B.
verified
rating uzivatele
28. 3. 2017 23:47:34
Ja mám na hostingu limit 500 mailov za hodinu, závisí aký limit máš na svojom hostingu alebo či máš VPS. Podľa toho treba ten skript naprogramovať, aby dal medzi jednotlivým odosielaním taký "sleep()", že sa to do tej hodiny presne zmestí, ja som dal pre istotu iba 300 mailov, zvyšných 200 je rezervovaných na registrácie a objednávky, nejaká rezerva sa vždy zíde. Tých 1000 mailov za deň je nič, to by som rozoslal za pár hodín a to na to mám bežný shared hosting. Odoslanie samotnej správy je pár sekúnd maximálne. Časový limit pre beh PHP skriptu si vieš nastaviť koľko potrebuješ, osobne mám nastavených 10 minút a skript si vždy selektne toľko príjemcov, aby to za tých 10 minút vybavil, následne sa ten skript spustí cez CRON znova a pokračuje v odosielaní. Neviem k akej blokácii by malo príjsť, záleži od hostingu čo máš, prípadne ak je mail zle naformátovaný alebo chýbajú niektoré údaje, príjemcov AntiSpam to môže bloknúť ale to je už iný príbeh... nie je to také úplne jednoduché ako by si asi chcel, ale dá sa to.. nemusíš mať MailChimp ani Amazon.
28. 3. 2017 23:47:34
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270323
Hitman1
verified
rating uzivatele
(38 hodnocení)
29. 3. 2017 09:23:39
Díky za reakce pánové.
Pokud vezmu variantu jak píše třeba Peter, jakým způsobem udělám sleep(), abych od dalšího spuštění pokračoval u 301 emailu a znovu od jedničky?
Napadá mě počítat proběhnutí cyklu a po 300 proběhnutí uložit ID posledního uživatele do DB a script ukončit. Po znovuspuštění cronem kontrolovat jaké je poslední ID a od toho pokračovat.
Jde to i nějak efektivněji? Něco jako "po 300 proběhnutích si dej pauzu dokud tě znovu nevzbudí cron"?
Limit na hostingu máme 5000/den, mám multihosting, tak třeba by to šlo ještě o něco navýšit...
29. 3. 2017 09:23:39
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270322
Peter.B.
verified
rating uzivatele
29. 3. 2017 09:42:49
Ja to mám tak, že každého spracovaného príjemcu si uložím do databázy a pri ďalšom spustení spravím selekt, kde týchto príjemcov vynechám... toto má svoje výhody napr. klient v administrácii vidí, ktorím príjemcom bol už newsletter odoslaný a do mailov pridávam aj tracking, takže si vie klient pozrieť aj ktorí príjemca si email otvoril. Ale záleži na tom, čo je výhodnejšie pre tbea a či to máš tiež napojené na administráci/CMS.
29. 3. 2017 09:42:49
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270321
Oleg
verified
rating uzivatele
(53 hodnocení)
29. 3. 2017 10:57:38
Abych nebyl uplne mimo tema... Ptas se jaky by to mohl mit problem rozesilat, treba tisic mailu, pritom vis, ze mas limit 5k denne.
problem muze byt blokace IP a zaneseni na BL, pak neodesles temer nic. Zjisti jaky mas limit za hodinu... A sam sobe pak i odpovis, ze mozna by to slo zvysit, nicmene my to nevime :(
V prvni rade je treba si rici, proc nepouzit radeji SMTPs misto mail()? A pak proc nepouzit nejake specializovane sluzby na rozesilani newsletteru, protoze je to drahe a levnejsi je pak kupovat novou IP nebo nemit moznost vubec odesilat, protoze budes na BL? Vzdyt napriklad Mailchimp ma moznost mit 2k adresatu a rozeslat 12k mailu mesicne zcela zdarma.
29. 3. 2017 10:57:38
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270320
Jan Kuthan
verified
rating uzivatele
(48 hodnocení)
29. 3. 2017 11:01:54
A není lepší, když už rozesílat od sebe (samožřejmě DKIM, SPF vyřešené) mít seznam příjemců v db, script co to odesílá spouštět cronem a každých 5 minut odeslat například 100 emailů + uložit, komu už bylo odesláno (kdy, co) a takhle postupně odpravit vše?
Dává to pak možnost "regulovat" rychlost odesílání a celkově větší kontrolu.
Řešení přes nějaké sleepy nebo refreshe ve stránce je dost špatné řekl bych.
29. 3. 2017 11:01:54
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270319
Hitman1
verified
rating uzivatele
(38 hodnocení)
29. 3. 2017 17:56:58
Oleg
Právě proto se ptám jak to funguje. Jedna věc je limit na hostingu a jedna blokace IP adresy...hodinový limit nemám, pouze denní.
Ohledně odesílání přes cizí službu - potřebuji z DB generovat určitá data pro každého uživatele unikátní + připojit unikátní přílohu, proto nemůžu využít externí službu.
Proč nepoužiji SMTPs? Jednoduše proto, protože limit na denní odeslání zpráv nižší než mail()...
kdosiodjinud
Ano, tak to asi vyřeším, jak psal Peter výše (díky).
Problém je ten denní limit, budu to muset rozdělit na více dnů abych se do limitu vešel, ale nedá se nic dělat.
29. 3. 2017 17:56:58
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270318
Všichni tady řešíte limity hostingu, ale nějak tu všichni zapomínají na limity poštovního serveru příjemce. Zejména veřejné emaily to mají občas nastaveny dost přísně. Takže pokud to člověk myslí nějak seriózně, tak musí vymyslet podstatně sofistikovanější systém, než jen cyklus s mail() a sleepem.
29. 3. 2017 18:17:53
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270317
Hitman1
verified
rating uzivatele
(38 hodnocení)
29. 3. 2017 23:42:21
mytrix
Můžeš to prosím více rozvést? Pokud jsem to já správně pochopil, funkce mail emaily natlačí do nějakého zásobníku ze kterého je poštovní server mého hostingu odešle. Tam jsou ty limity co jsme řešili.
Ale limity poštovního serveru příjemce? Příjemci budou různí, takže emaily půjdou na XXX poštovních serverů, nebo se mýlím?
29. 3. 2017 23:42:21
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270316
Tak to záleží jakou máte skladbu příjemců. Ale vím že se to už kdysi řešilo ohledně newsletteru. Například když by byli příjemci hlavně v rámci ČR, tak statisticky dost velká část z nich bude mít email na seznamu. Pokud pošlete nějaký počet emailů během nějakého časového úseku, tak si vysloužíte BAN.
Nechci tu teď říkat přesné počty, protože ono se to tak v průběhu času mění, ale tuším že už jsem tu někde četl, že podobné chování může nastat i po pár desítkách takto odeslaných emailů. To je přesně důvod, proč podobné služby na rozesílání emailů využívají poměrně rozsáhlou síť různých IP adres, aby podobným problémům předešly.
30. 3. 2017 00:02:22
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270315
Peter.B.
verified
rating uzivatele
30. 3. 2017 04:28:36
Ten sleep() je v PHP skripte nie v stránke a slúži na to, aby medzi jednotlivými mailami bola medzera lebo, keď sa to všetko v jednom cykle bez pauzy natlačí na mail server tak to tiež nie je dobre. Taktiež to zabezpečí, že nedostanete ban na zozname a iných freemailoch. Ale súhlasím s tým, že funkciu mail() proste nepoužívať a pripájať sa priamo na SMTP server, tam sa dá už potom aj dorobiť funkcia, že po určitom počte mailov by sa zmenil server na odosielanie keby bol problém s nejakým blokovaním... ale ako píšem ak je tam ten sleep() a posielaš cca. 500 mailov za hodinu... nemáš problém. Proste to skús a tých čo tu strašia moc nerieš.
30. 3. 2017 04:28:36
https://webtrh.cz/diskuse/odesilani-tisicu-emailu-v-php-vcetne-male-prilohy/#reply1270314
Pro odpověď se přihlašte.
Přihlásit