Hírlevél küldés sok címre egyszerre
Problémám igazából az lenne, hogy sok (2-3 ezer) e-mail címre kellene elküldenem hírlevelet havonta egyszer. Ott kezdődnek a nehézségek hogy se cron se semmi ilyesmi nem áll rendelkezésemre így nem tudom több adagban küldeni a leveleket de egyszerre sem szeretném tekintve hogy egyenként mail függvénnyel nem a legjobb küldözgetni. Az e-mail címek MySQL adatbázisban vannak tárolva, ezen kívül PHP, Javascript, Ajax amivel dolgozhatok igazából mással nem. A lényeg az lenne hogy kisebb adagokban tudjam küldeni a levelet de ne kelljen manuálisan küldözgetni. Előre megírt dolgot sem akarok tehát inkább a módszer érdekel amit én megvalósítanék. Örömmel veszek bármilyen tanácsot segítséget!
■
Távoli cron
Ne haragudj...
Miért?
Távoli elérés?
Egyszerre
Tehát..
Én így csinálom
Postfix
Connection
Tutimegoldás
Azért nem árt vigyázni...
Én inkább azt javaslom, hogy:
1. másodpercenként 5-10 levelet küldj ki
2. egyszerre viszonlag keveset (pár százat), és várj néhány percet a küldések között. Ez megoldható akár cron-nal, akár sima meta refresh-sel is (ízlés dolga).
Mindez persze csak akkor érdekes, ha a levél mérete nagyobb 10-20k-nál.
UI. A max mails per connection könnyen kijátszható, ha x levél után bontod a kapcsolatot és újra felépíted, vagy a 2. pontban csak a max mails alatti számú levelet küldesz egyszerre.
UI2. az nem hangzott el a témaindítóban, hogy személyre szabott-e a hírlevél. Mert ha nem, akkor a bcc-be pakolt címek a leggyorsabb megoldás.
Uggyan... :)
Persze ártani nem árthat, ha magunk is alkalmazunk óvintézkedéseket, mint amiket írtál, de nem kell alábecsülni az eszközöket.
postfix
Kicsit konkrétabban?
Darabolt futás a háttérben
Ne csináld
Normálisan meg kell írni szerver oldalon a levélküldést egy erre speciálisan berendezett MTA-val (Mail Transfer Agent avagy levélszerver) és kész. Ha nem értesz hozzá, föl lehet bérelni egy szakit, aki megcsinálja. Mindenféle mailes berhelésnek csak az a vége, hogy önmagad szivatod meg, a következmények pedig: spamlistára kerülés, elégedetlen ügyfél, rosszul kézbesített levelek és ettől ideges címzettek, stb.
Hát igen..
Barkács
Épp ezért kell normálisan megírni. Abból indultam ki, amit felyx írt, hogy nincs más csak a kalapács meg a szög! Nyílván elektromos csavarhúzóval neki is egyszerűbb lenne, de ha nincs?
A terhelésre pedig még mindig azt látom megoldásnak, hogy jól kell megválasztani az oldal/levél és az levél/percenként számokat.
Téma
Ha az alkalmazásod Linux/Unix-on fut, a korlátozásokkal sincs gond, mert a PHP mail() unixokon a sendmail programot használja a küldésre, ami nem használ SMTP kapcsolatot, hanem közvetlenül berakja az üzeneteket a sorba. Így nem fog zavarni, hogy a mail szerver egyébként hány levelet engedélyez kapcsolatonként. Legalábbis ez a sendmail szabványos működése. A hagyományos sendmail-nél, postfix-nál, qmail-nél biztosan így van. Az meg hogy megfelelően legyenek adagolva a kifelé menő levelek és ne zabálja le a nagy feladat a szerver erőforrásait, már az MTA (a leveleket továbbító szoftver, mailszerver) feladata, úgyhogy ezzel elvileg nem kell törődnöd.
A végrehajtási idő (max_execution_time) így is gond lehet, ezért ha ezt nem tudod nagyobbra állítani a PHP-ban, valószínűleg több adagban kell az üzeneteket elküldeni. 10-szer rákattintani az "Elküld" gombra, elég nyűgös megoldás, de ha csak ez van, akkor ezt kell szeretni.
Amúgy a levelek megfelelő formázása (fejlécek, kódolás, stb.) sem túl egyszerű feladat, legalábbis egy csomó szabályt kell betartani (= sok hibalehetőség: furcsa karakterek, rosszul megjelenő üzenet, a levél megy a SPAM mappába, stb.). Ezeket a szabályokat mail() függvény nem kezeli automatikusan, ezért ha nincs időd / kedved az rfc2822-t olvasgatni, érdemes kipróbálni a PEAR Mail és Mail_Mime csomagját, Sok szívástól kímélhet meg (bár a szívás egyesek szerint erősíti a lelket).
perszonalizált?
Fölösleges terheléstől szerintem nem nagyon kell tartani (nyilván nem nyit az ember minden kéréskor SMTP kapcsolatot), illetve lehet ezt okosan is csinálni. Pl. tudod nagyjából a látogatottsági statisztikád, ennek fényében a kérések végén nézel egy random számot, ha ez 1, akkor kigenerálod az oldalba egy kép src-jébe a cron.php-d. Ez ha meghívódik, akkor megnézi, hogy van-e dolga, és ha van, akkor elvégzi (elküldi az adott mennyiségű levelet).
Üdv,
Felhő
nekem lenne egy oldalam...
nem hiszem h lenne olyan program vagy bármi, ami ezeknek az igényeknek megfelel, de szívesen várok ötleteket... az oprendszer egyébként windows ha kell... az lenne a jó, ha egy adott mysql táblából szépen kiszedné a neveket és az email-címeket..
Szerk.: írjak inkább sajátot php-ban a mail() függvénnyel?
Nem, nyiss új témát új