Quanto funzione molto mail () può essere usato in tempo di esecuzione 30sec?
-
13-09-2019 - |
Domanda
Devo realizzato una pagina che invierà e-mail a iscritti alla Newsletter. Non v'è più di 14000 abbonati. Voglio usare la funzione php mail () per inviare e-mail a loro. Ma temo che non sarà in grado di inviare e-mail a tutti gli iscritti per il limite max_execution_time php 30sec. La sua non è possibile testare la quantità di e-mail possono essere inviati con l'invio di e-mail a test abbonati. Allora voglio sapere quanto e-mail possono essere inviati con la funzione mail () in 30 secondo limite max_execution_time. Sarà molto utile se mi è possibile rispondere.
anche un'altra domanda - è tempo di esecuzione è mysql contare anche in php?
Apache versione 2.2.13 (Unix) PHP versione 5.2.11
Soluzione
L'impostazione php max_execution_time
è personalizzabile. secondi 30
è l'impostazione predefinita ma è possibile impostarlo su 0
secondi per alcun limite di tempo di esecuzione a tutti. Utilizzare set_time_limit () .
set_time_limit(0);
Se si fa questo, si dovrebbe essere in grado di inviare tutte le vostre email.
Si prega di fare attenzione circa l'invio di più di una e-mail allo stesso server di posta al secondo. Se non si desidera ottenere nella lista nera.
Altri suggerimenti
È necessario eseguire questo da un cronjob o di generare un compito sfondo o usare qualcos'altro più adatto a processi batch.
Si potrebbe ottenere 14000 email fuori in 30 secondi se il vostro server di posta è abbastanza veloce, ma cosa succede quando si ottiene un paio di più abbonati e smette di funzionare correttamente?
Forse si può impostare un flag nel database per ogni utente, quindi reimpostare la bandiera come la loro e-mail viene inviata da un task in background. Ciò contribuirà ad evitare i duplicati e così via, se c'è un problema con il server di posta.
Questo dipende da tante variabili che una singola risposta non è possibile. I fattori includono:
- La velocità della CPU
- La larghezza di banda a disposizione dal sistema di invio al MTA
- La capacità del MTA di accettare messaggi di posta elettronica
L'unico modo per scoprirlo è provare.
Ho avuto questo problema esatto un po 'indietro su uno dei miei progetti. La soluzione è quella di isolare l'invio di email dal sito vero e proprio.
ho codificato una piccola classe che sarebbe stato chiamato per inviare una e-mail. Si sarebbe passata una e-mail basato su modelli, che sarebbe quindi memorizzare nel database in una coda di posta. Sul back-end, ho avuto un job cron che ha chiamato uno script mailer ogni X secondi. Script guarda la coda del database per le email, afferra un numero X dalla coda per tentare di inviare (in ordine di data e ora in), poi avrebbe tentato di consegna. Supponendo che nessun errore sono stati gettati, script dovrebbe contrassegnare il messaggio come inviato. Il passo successivo sarebbe quello di eliminare tutti i messaggi di posta elettronica dalla coda che sono stati inviati e più vecchio di X giorni (conservato per la registrazione).
La speranza che è utile.
Scherzi a parte, se si desidera inviare la stessa mail a dieci persone dal vostro mailapp normale, si fa normalmente creano dieci mail identici o non basta inviare la posta una volta aggiungendo i destinatari alla lista di invio?
Modifica Se la risposta è "Io mando una volta", penso che si dovrebbe guardare in quella direzione anche qui (è anche descritto come inviare a più destinatari http://www.php.net/mail )