Svish Skrevet 23. november 2007 Skrevet 23. november 2007 (endret) Jeg skal prøve å lage en mass-emailer sak som skal brukes til å sende et newsletter til folk fra en database. Har sett litt på www.swiftmailer.org, og virker som den er ganske grei til å sende epost. Men den skal sende ganske mange. Og virker som den kan det. Men det kan jo ta litt tid. Så det jeg lurer på, er om det er mulig på noe vis å lage en fremdriftsindikator eller noe? Kan man få til det? Ved hjelp av AJAX eller noe? Hvis man har en side hvor man trykker [send], og den setter igang en ajax sak som setter igang et php-script? Er det da noen lur måte å finne ut hvor langt den har kommet og rapportere det tilbake til siden? For eksempel ved å sette width på et element, eller bare dytte ut "x av y sendt" eller noe sånt... Noen ideer? Cause I don't really have much idea EDIT: Prøvd å søke på det, men finner bare eksempler på filopplasting, og patching av php osv... :? Endret 23. november 2007 av Tussi_qwerty
Mats Danielsen Skrevet 23. november 2007 Skrevet 23. november 2007 Hvor mange er det snakk om? Over 100 000? Isåfall spam?
Svish Skrevet 23. november 2007 Forfatter Skrevet 23. november 2007 (endret) Skal sende epost til 500+ personer. Og personene har da lagt seg til på denne listen selv, eller blitt lagt til av oss etter at de har gitt ønske om det. Med andre ord ønsker personene å få epostene. Altså ikke snakk om spam i den grad at det er uønsket (eller heter det "i den grad at det er ønsket"? ble plutselig usikker her... uansett så skjønner dere vel hva jeg mener ) Vurderer å lage en table i mysql-databasen, og så dytte inn alle som skal sendes til der. Og så kan et script begynne å hente ut en og en og sende, eventuelt alle på en gang. men i hvert fall, så slette de fra den listen ettersom den får sendt. Da kan den andre siden sjekke hvor mange som er igjen i listen, og vite hvor mange som er igjen. Problemet er jo at det kanskje er noe ueffektivt... ettersom den da må kjøre 500+ delete setninger men ja... kommer bare til å skje kanskje en gang i uka/måneden. Ingen som har noen lure ideer? Endret 23. november 2007 av Tussi_qwerty
Gjest Slettet+142 Skrevet 24. november 2007 Skrevet 24. november 2007 (endret) Eller så kan du lage et table som inneholder hver person som skal motta, epostadresser osv, i tillegg til et felt som oppdateres med siste "mail_id" hvis du skjønner. f.eks newsletter#1 har mail_id 1. #2 har 2 osv.. Og etter at mailene er sendt, kjører du EN "Update maillist set mail_id={$mail_id} WHERE id IN (".implode(", " $ider_som_er_sendt_til).")"; etter at alle er sendt Edit: Eller nei.. Jeg må lære meg å lese hele førsteposten før jeg svarer.. Endret 24. november 2007 av Slettet+142
Ernie Skrevet 24. november 2007 Skrevet 24. november 2007 Er det ikke et alternativ å sende ut en mail med alle mottakere som bcc? Klart, serveren som skal sende det får det jo gøy, men du sender jo bare en mail isåfall.
funkyboy Skrevet 24. november 2007 Skrevet 24. november 2007 Hva med å ta et array med personer som skal få mailen, legge antallet som mål i en for- løkke, og la løkken sende mail og skrive ut en status for hver gang det er sendt / ikke sendt en mail? Du må da isåfall overskrive timeout- funksjonen i php.ini samtidig, da denne kommer til å bruke lang tid (30 sek. er vel default her..?). Men du vil i alle fall ha en nogenlunde oversikt, og få fanget opp de som ikke har blitt tilsendt mail samtidig. En versjon her, er å skrive denne listen som en form, og ha checkbokser på hver linje, slik at du eventuelt kan markere av enkeltpersoner underveis/ før/ etter.
Gjest Slettet+142 Skrevet 24. november 2007 Skrevet 24. november 2007 På den måten der kan jo faktisk mitt forslag også funke bra. $mail_id = 1; $mail_subject = "Newsletter"; $mail_msg = "Dette her er meldingen"; $mail_headers = ""; $query = mysql_query("SELECT * FROM maillist WHERE mail_id<{$mail_id}"); // sjekk sikkerhet $i = 0; $person_array = array(); while($r = mysql_fetch_assoc($query)){ if($i%5==0){ $update_query = mysql_query("UPDATE maillist SET mail_id={$mail_id} WHERE id IN (".implode(", ", $person_array).")"); $i = 0; $person_array = array(); } mail($r["til"], $mail_subject, $mail_msg, $mail_headers); ++$i; $person_array[] = $r["id"]; } Jeje. Stygt eksempel, men kodet det i Hurtigsvar-boksen. Håper at det hjelper deg.
Kagee Skrevet 24. november 2007 Skrevet 24. november 2007 (endret) Ja, det er mulig å få til et system som "teller opp" hvor mange eposter du har sendt med Javascript + PHP. (dårlig) Pseudokode: Tast inn adresser / ha dem klare fra før av Last indikator.html Indikator.html inneholder et javascript som bruker AJAX-kode til å be om siden [email protected]&msg=msg_1 Sendmail.php returnerer 0 eller 1 (string) avhengig av om eposten ble sendt eller ikke Javascriptkoden på indikator.html holder orden på hvor mange av epostene som er sendt, og oppdaterer en indikator. Dvs: Du åpner Indikator.html som åpner sedmail.php for deg ørten ganger, og sender en-og-en epost. BBC-feltet er også en løsning (men takler det 500 mottagere?) Endret 24. november 2007 av Kagee
funkyboy Skrevet 24. november 2007 Skrevet 24. november 2007 (endret) Ja, forsåvidt det samme om en bruker while eller for når jeg tenker meg om.. Her var uansett en greie jeg så for meg (skrevet som svært enkel, og usikret jallakode); // Sett annen verdi i php.ini: ini_set('MAX_EXECUTION_TIME', '2000'); // Denne er sannsynligvis skrevet feil.. // Hent alle brukere som skal ha epost: $sql = "SELECT brukernavn, epost FROM XXX WHERE epostmottak = '1' ORDER BY brukernavn"; $resultat = Hent_fra database($sql); // Tell antall, sorter alfalbetisk $antall = mysql_num_rows($resultat); $rad = mysql_fetch_array($resultat); asort($rad); // Tror asort() blir riktig, uten å ha sjekket.. // Start skjema echo '<form action="" method="post" id="keeper">; // Kjør løkke som sender mail, skriver liste/ skjema med ikke sendte mails avmerket (skrives ut underveis). for ($i=1; $i=<$antall; $i++) { if (!mail(*headers, mailadresse, etc*)) { echo '<input type="checkbox" selected />' . $rad['brukernavn'] . '<br />'; } else echo '<input type="checkbox" name="' . $i . '"/>' . $rad['brukernavn'] . '<br />'; } // Slutt skjema echo '<input type="submit" value="Send på nytt til avmerkede" />'; echo '</form>'; // Tilbakestill php.ini ini_restore('MAX_EXECUTION_TIME'); Edit: Ja, er noen feil her og der. Men poenget illustreres i alle fall. Endret 24. november 2007 av funkyboy
Ernie Skrevet 24. november 2007 Skrevet 24. november 2007 BBC-feltet er også en løsning (men takler det 500 mottagere?) Det er i utgangspunktet ingen begrensning på hvor mange du kan sette opp, men det er klart endel ISP-er sikkert har satt en begrensning på et eller annet. Uannsett er det mye enklere (og sikkert også mer effektivt) å sende ut i bunker på x i stedet for å sende ut enkeltvis, og har man full kontroll over mail-serveren kan man jo i praksis pushe ut ganske mye mail pr. kjørte mail().
Svish Skrevet 25. november 2007 Forfatter Skrevet 25. november 2007 mange gode ideer her ja. Og når jeg bare får vasket opp et fjell av stash her, så tenker jeg å begynne å eksperimentere litt. BCC feltet vil være det enkleste. Men som noen nevner her, så har jeg en følelse av at en epost med 500+ BCC adresser muligens vil slite litt på serveren. Skulle ikke forundre meg om den blir tagget som spam heller liksom. Det å sende x og x i slengen var jo ikke så dumt. Har ikke noe kontroll over hverken mail-serveren eller serveren i det hele tatt, men hvis man tar 10 og 10 i slengen for eksempel. Så burde det jo gå relativt mye kjappere. Og 10 burde jo takles ganske greit også. Tenkte litt på JavaScript versjonen og fyre av en og en, men det vil jo bli særs mye trafikk frem og tilbake. Og litt småstress hvis browseren sliter med javascript og slikt... Å kjøre igjennom en løkke med echo og flush for hver n'te epost er nok det jeg kommer til å ende opp med. Tenker at kanskje ajax request saken i prototype.js kan fungere med onInteractive (http://www.prototypejs.org/api/ajax/options). Aldri prøvd den før, men kan virke som den er litt artig i denne sammenhengen. For da kan man flushe ut status, og teoretisk sett i mitt hode, så kan man da erstatte en boks med innholde man får ut og droppe det som er sent før, etc... eller noe...
Kagee Skrevet 25. november 2007 Skrevet 25. november 2007 (endret) Jeg vil forsvare javacript litt: Du behøver ikke å fyre av bare 1 og en, det avhenger jo selvfølgelig av hvordan du skriver scriptet. Det burde også kun kreve de mest grunnleggende komponentene i XMLHttp, og kan være så basic at den bare endrer teksten i en tekstbok (<input type="text">) Du skal ha en gammel browser for ikke å støtte de to. Mye trafikk? Forespørsel: Send eposter til mottager 1 - 10, med melding 2 Svar: Det gikk/ikke Endret 25. november 2007 av Kagee
Svish Skrevet 25. november 2007 Forfatter Skrevet 25. november 2007 med 1-10 blir det jo mindre ja, men med 1 per epost, så blir det jo en del frem og tilbake. Har puttet sammen databasen nå, mer eller mindre. men fremdriften har blitt noe bremset av en ekstern disk som driver å feiler... fant ut jeg skulle kjøre litt backup av så mye som mulig istedet aj aj aj...
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå