Avatar billede x4all_dk Nybegynder
17. januar 2006 - 12:07 Der er 11 kommentarer og
1 løsning

Afsending af mange mails

Efter at have gransket Eksperten vedr. dette problem, er jeg ikke kommet frem til en endelig løsning. Derfor beder jeg nu om en som vil paste en "færdig" løsning!

Jeg vil gerne sende 1000 (eller flere) emails uden at min execution time udløber. (PHP kører i Safe-mode, og derfor kan jeg ikke ændre set_time_limit(0);)

Jeg har alle mails i et Array.

Det ser ud til at man kan sende 100 af gangen på en fiks måde, men.. jeg giver 60 point til den som giver mig løsningen!
Avatar billede phliplip Nybegynder
17. januar 2006 - 12:13 #1
Har selv rodet med problemet!

Hvis du har gemt dine mailadresser i et array, den mail du vil sende, samt en counter
i _SESSION!

Så er løsningen at loope X antal mailadresser igennem, og reload så siden

header("Location: dinmailsender.php");

som så skal fortsætte med de næste X mails!

Jeg har også indopereret en sleeper som ved hver anden reload sleeper XX sekunder og så reloader siden igen! Så man giver sin SMTP-server en chance for at kunne følge med!
Avatar billede cpfrande Nybegynder
17. januar 2006 - 18:53 #2
Umiddelbart er der ikke så mange andre løsninger end den phliplip kommer med, når du ikke kan ændre i din max execution time.

Jeg foreslår nogenlunde samme løsning som phliplip, dog ikke baseret på en counter, der refresher efter X gennemløb. Hvad så hvis en e-mail tager 3 sekunder om at blive sendt? (hvis SMTP-serverne skulle være langsom).

Jeg ville nok arbejde med noget tid i stedet vha. time() og tjekke om tiden er ved at løbe ud. På den måde kan man sikre sig bedre mod at få en max execution timeout.

--
Kristian
Avatar billede phliplip Nybegynder
17. januar 2006 - 23:46 #3
Jeg har lavet et nyhedsbrev-script (til intranet) til et firma i Holte og de bruger det i deres 20 butikker som ca. sender over 5000 mails ud.. Og der sender den 20 mails pr. loop og sleeper 2 sek tror jeg! De har ikke haft nogen probs endnu såvidt jeg er informeret!
Avatar billede cpfrande Nybegynder
18. januar 2006 - 08:43 #4
phliplip:
Jeg siger heller ikke dit script er fejlfyldt eller andet. Jeg siger bare, at jeg vil tage tidsfaktoren med i stedet. På den måde kan du undgå hvis SMTP-serveren svarer for langsomt (hvis din tidsgrænse er sat ok selvf.) og du kan udnytte tiden bedre (dvs. du kan undgå for mange reloads).

Du sender 20 mails pr. loop og sleeper i 2 sek. Det kunne jo være, at hvis tidsfaktoreren var med, så kunne du sende 40 mails pr. loop og sleep i 2 sek. Det giver en lille forbedring rent "tidsmæssigt" - det var blot det, som var min lille pointe - for der er intet galt med din løsning heller. :-)

--
Kristian
Avatar billede phliplip Nybegynder
18. januar 2006 - 22:49 #5
cpfrande: Jeg var såmen heller ikke fornærmet eller noget !-) rolig!

Kan godt se at det er smart det du foreslår.. Skal jeg huske næste gang jeg roder med en safemode=on server
Avatar billede x4all_dk Nybegynder
19. januar 2006 - 10:55 #6
cpfrande: Med "time()" kan man ikke bruge til at beregne hvor meget CPU-tid som en process har taget! Det kan man "microtime()".  Men ideen er god, og jeg agter at bruge den måde at sende på!

phliplip: Jeps, jeg forsøger!
Avatar billede cpfrande Nybegynder
19. januar 2006 - 11:22 #7
Halløjsa,

Nu ved jeg ikke hvor meget du kender til de to, men hovedforskellen er at time() angives i sekunder, mens microtime() angives i microsekunder.

Du kan fint udregne hvor lang tid dit nuværende scripts har arbejdet med time(). Du får selvf. resultatet i sekunder, men det er vel også fint nok, eftersom max-execution-time er angivet i sekunder i PHPs opsætning.

Så det afhænger helt af hvordan du vil have resultatet :-)

--
Kristian
Avatar billede x4all_dk Nybegynder
20. januar 2006 - 12:01 #8
cpfrande: Du har ret!  Jeg misforstod en eller anden Google-søgnings-resultat!

phliplip og cpfrande: Det ser ud til at det virker nu, tester lige lidt mere inden i begge vil få point (hvis i ønsker det)!
Avatar billede cpfrande Nybegynder
20. januar 2006 - 14:37 #9
Jo, tak.

Jeg poster hermed allerede et svar :-)

God fornøjelse!
Avatar billede x4all_dk Nybegynder
06. februar 2006 - 11:58 #10
Ok nu er det tid til at lukke.
Avatar billede cpfrande Nybegynder
06. februar 2006 - 12:18 #11
Takker for points! :-)
Avatar billede phliplip Nybegynder
06. februar 2006 - 13:30 #12
Hehe.. der var jeg sq for langsom ;-/
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester