Er der nogen af jer der har erfaringer med programmering af systemer til masseudsendelse af e-mails?
Jeg skal til at programmere et system der kan håndtere at sende omkring 100k e-mails, med forskellig indhold. Systemet skal erstatte den nyhedsbrevs funktion jeg allerede har programmeret, da den bliver for langsom når man sender mere en 40k mails (> 60 sek. pr. mail når man kommer over et vist antal). Nyhedsbrevs funktionen er kodet i PHP, og bruger PHP’s mail funktion til at sende hver mail.
Jeg gik og overvejede om det ville være hurtigere hvis jeg sendte mailsne direkte til smtp serveren, dvs. ved at åbne en socket til den.
Er der nogen af jer der har nogle ideer? Det er lige meget hvilket programmeringssprog der danner grundlag for dine erfaringer.
Jeg vil også gerne vide, hvor mange e-mailadresser er det muligt at sætte i en BCC? Tror i 1000 er for mange?
Måske kan du bruge PHPMailer. Jeg har ikke selv afprøvet det endnu, men er ved at bygge en side, hvor jeg anvender PHPMailer. Her er det muligt at anvende sockets: http://phpmailer.sourceforge.net/
jeg har haft leget med mail afsendelse via sockets - og det er faktisk ikke _SÅ_ svært at det gør noget... det kan sagtens lade sig gøre
kender du SMTP protokollen, ellers kan jeg godt smide nogle ex.
pseudo kode følger på forløb åben socket $sock while(flere mails) send mail ved brug af socket $sock luk socket $sock
tid brugt i en socket tæller ikke med i ekseverings tid, så med lidt held kan du lade være med at fuske med set_time_limie()...
MEN, ved 100k mails vil det nok være smartes at lave en side der fx sender 1000, reloader sig selv, sender de næste 1000 osv så man har en ide om hvor langt den er kommet...
---
hvis du kender meget til advanceret PHP (jeg har fx aldrig leget med det - det er ret "mærkligt") kan du undersøge brugen af "ticks" til at lave noget multi-process afsendelse af mails når du har åbnet socketen, dette vil nok vinde lidt tid da den ville kunne kørere flere processer der uploader mail og venter på svar fra mail server...
---
kender ikke lige til grænser for BCC, men tror ikke det kan være sundt at smide fx 1000 i BCC (prøv at læs RFCen om SMTP og se om du kan finde et svar)
Hmmm, PHPMailer, det var en mulighed, den kan sprede det ud over flere servere. I deres FAQ, der skriver de at det hurtigste er at bruge PHP’s mail funktion.
Der står ikke noget i SMTP’s RFC om max antal adresser i to, cc eller bcc. Desværre… Det er noget man kan sætte op i nogle mailservere. Men hvor mange acceptere de forskellige mailservers?
Hvorfor vil du have at siden skal reloade… lige nu er der bare en proces bar, der viser, både med en graf, og med tal, hvor langt den er kommet.
Man kunne godt bruge ticks, men så er det en bedre teknisk løsning at åbne for f.eks. 10 sockets, og så bruge socket_select(). Så kan man sende / arbejde med alle 10 på en gang…
Jeg er ikke sikker på om jeg har ret, men jeg mener at PHPMailer kun er hurtigst ved at bruge php's egen mail-funktion, hvis scriptet afvikles på en UNIX. På en windows maskine sættes mail() jo til at brugen en SMTP, og derfor er det hurtigere at bruge sockets, som kan holdes åbne indtil al mail er sendt.
karto -> 1) hvordan kan du vise progress uden at reloade (med implicit-flush og JS?) 2) kender ikke lige omtalte funktion - men kunne man nok... (så du var nok (også) ret god til PHP - hæhæ)
muddi -> kan du nok have ret i, lydder meget plausibelt (spl?) ;)
by-the-way... det er hurtigere at lave et kald til echo ud over flere linier end at lave en echo på hver linie (har haft kørt tidskørlser på det engang)...
karto -> er du sikker på at det din server der bliver sløv efter 40k e-mails... og ikke din computer, efter alle de udregninger du har sat den til :D
Som jeg umidlbart læser din kode, så ender du op md at have over 100.000 liniers kode på din progressbar-side...
Ville i øvrigt være en god idé at dele scriptet ud over en længere periode... lav det over et cron-job, så du kan sende 5.000 e-mails afsted hvert kvarter...
halnet -> godt spottet... udsendelsen af de mange data (og beregningen på dataen på klienten, som jo oftest er en og samme computer under tests) vil sænke processen utroeligt...
jeg ville nok lave noget tjek på hvor mange mails der pt er i databasen og så ud fra det afgøre hvor ofte jeg vil sende data til klientet (fx hvert 10. mail / hver 50. mail eller hver 100. mail så datamængden bliver væsenlig mindre !)
karto -> OK... (men måske lidt mere end 10 gange ved 100k mails ville være rart... (gad personligt ikke vente 10k mails på at få en ca. tid på hvor lang tid det tager ;))
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.