2012-05-14 4 views
5

L'invio di mezzo milione di email richiede troppo tempo: da 6 a 8 ore. La quota consente di 90 e-mail al secondo. Invio da un server dedicato con buone prestazioni, quindi la memoria/connessione non dovrebbe essere il problema. Utilizzo di batch di 50 e-mail contemporaneamente.Come velocizzare l'invio di posta tramite Amazon SES?

Provato un numero variabile di emais in un batch: più di 50 causa errori CURL: sembra che non ci sia risposta da Amazon ad alcuni dei thread. Anche con 50 in un batch e una pausa di 1200 ms tra i lotti, ogni mailout subisce diversi inconvenienti.

Quindi un batch medio di 50 richiede da 4 a 6 secondi per completare una pausa di + 1,2 secondi, un tempo abbastanza lungo per un invio giornaliero di 500k.

Si prega di consigli su come ottimizzare la corrispondenza per ottenere la sua velocità più vicino alle 90 mail/s.

+1

90 mails/sec e la posta media supportata inviano il throughput non necessario. Il controllo con Amazon sul throughput supportato (ad esempio ogni ora) e gli approcci raccomandati possono essere una buona idea. –

+0

Un singolo lotto di 90 mail esce normalmente. È la modalità di "produzione" in cui sorgono i problemi. – Serge

+0

Sto avendo lo stesso problema :(Ho intenzione di inviare 1 milione di email. Ho scritto uno script usando PHPMailer per inviare a SES. Ho provato con 5 e-mail e ci sono voluti 10 secondi! Quando ho acceso la modalità di debug ho trovato che PHMailer ha ripetuto la stessa procedura: aprire una connessione con Amazon SES, autenticarsi, inviare contenuto di posta elettronica e ricevere il risultato dell'invio. Sarebbe più veloce se potessimo aprire la connessione e autenticarsi una volta per tutte, quindi chiudere. Non sono sicuro se questo è il tuo caso. Cosa usi per inviare e-mail? –

risposta

0

Che ne dici di eseguire più lavori in parallelo? In questo modo il danno potenziale da ogni errore CURL è diminuito. Inizia con due lavori, in cui ciascuno ha le sue pause e limiti adeguati di conseguenza.

È inoltre necessario assicurarsi di impostare i timeout in arricciatura. Configura CURLOPT_CONNECTTIMEOUT e CURLOPT_TIMEOUT come minimo.