2010-01-27 8 views
7

Sto preparando un sito Web che invierà notifiche e-mail agli utenti registrati. Dalla mia esperienza, so che inviare e-mail è un processo un po 'doloroso per PHP, soprattutto quando parliamo di migliaia. Uno dei miei siti Web invia email ogni tanto a 1000-1500 persone. Ci vogliono circa 5 minuti perché PHP lo realizzi, quindi lo eseguiamo durante la notte quando il carico del server è il più basso. Sto usando la funzione nativa mail() senza alcun SMTP. Funziona bene su un server dedicato, ma non sono un grande fan di questa soluzione.Parere sull'invio di e-mail da php

Desidero poter inviare importi simili in qualsiasi momento senza mettere a rischio il server che si arresta (e deve essere inserito nella blacklist).
Ho letto che la soluzione ideale è quella di inviare e-mail in batch (ad esempio di 20) ogni due minuti da uno script attivato da Cron. Questa mi sembra un'idea davvero ragionevole, ma ... Cosa succede se non ho accesso a Cron (non tutti i provider di hosting danno accesso ad esso) e il sito web non è abbastanza popolare da essere in grado di attivare lo script a pagina caricare?

Sto insistendo per utilizzare il mio server per fare il mailing e non alcuna soluzione esterna.

PS. Ho trovato soluzioni come queste: http://www.mywebcron.com/ ma va bene?


EDIT

solo per aggiungere:

  • sto utilizzando CodeIgniter,
  • tasso a cui le email vengono inviate dal mio server corrente è di solito 0.2sec per e-mail.
+0

V'è un wrapper per CodeIgniter SwiftMailer; è nella wiki, provalo: http://codeigniter.com/wiki/CI_SWIFT_MAILER/ – gyo

risposta

3

utilizzare una classe mailer PHP come PHPmailer o SwiftMailer, è possibile inviare messaggi SMTP direttamente attraverso quel modo, che sarà molto più veloce. E sì, l'invio di grandi quantità di e-mail è fatto meglio tramite cron, quindi si inviano email X ogni minuto. Eviterai il sovraccarico del server in questo modo. Se non riesci a creare processi cron sul tuo server ti suggerisco di cambiare fornitore di hosting, altrimenti il ​​sito web che hai linkato è l'unica valida alternativa (ma in questo modo sei dipendente da terze parti, il che non è proprio bello)

+0

In aggiunta alla risposta di Jan: se non riesci a pianificare i lavori cron sul tuo server (come nel caso della maggior parte degli hosting a basso costo soluzioni), ci sono alcune alternative php per eseguire lavori programmati: [phpjobscheduler] (http://www.phpjobscheduler.co.uk/) è una di quelle alternative. – Powertieke

2

Se non è possibile utilizzare un lavoro periodico, è consigliabile esaminare una soluzione di accodamento come Gearman.

Ciò che si vorrebbe fare è inserire tutte le e-mail nella coda e disporre di 1 o più lavoratori a esecuzione prolungata che prelevano i lavori dalla coda. Se vuoi aggiungere un ritardo nel sistema, aggiungi anche un po 'di sonno.

Alcuni pseudocodice veramente di base:

#wherever you launch the jobs from 
for each user 
    gearman.push(user.generateEmail()) 


#in your consumer script 
while true 
    message = gearman.consume() 
    message.send() 
    sleep(5) 
Problemi correlati