PHP Posta () ve çağrılar arasında Uyku

4 Cevap php

Nasıl 3000 alıcıları söylemek için, bir e-posta göndermek istiyorum - benim özel IP üzerinde Max 500 e-posta / saat? Şimdiye kadar benim düşünce her e-posta her 9 saniyede göndermek için, bu yaklaşık 450 e-postalar bir saat gelirdi ... ama ben bunu nasıl yapabilirim?

E-postaları göndermek için planım şu olacaktır ...

$emails = ARRAY OF EMAILS, MYSQL RESULT
for($emails){
mail($subject,$row[email],$headers);
}

Bu alışkanlık iş, zaten açıklamada ancak bu kavramın yanlış tür ....

4 Cevap

Ne yapardın olduğunu:

  • saatte bir cron üzerinden başlatılan bir PHP komut dosyası oluşturmak
  • Bu script sadece kendi hızında, 450 e-postalar gönderir
  • 450 postalar gönderildiği zaman komut dosyası ölür
  • ve bir süre sonra, 450 diğer postaları göndermek için, cron tarafından, yeniden başlatıldı.

The trick is : you have to know which mails where already sent.
Ordering the mails by id in your DB, or something like that, and using limit, would be OK, I suppose

, Siz, postalar arasında bir süre için uyku sleep işlevini kullanmak istiyorsanız 2 ve 5 saniye arasında bir şey muhtemelen script cron tarafından yeniden başlatılmadan önce, size komut 450 postaların öbek bitmiş olduğundan emin olmak için, Tamam olurdu.


And, thinking about it :

  • Eğer bir yerde bazı günlük şeyler koymak gerekir: Birisi o 10 e-postalar aldı söyleyerek şikayet ediyorsa, bunun nedenini öğrenmek yardımcı olabilir.
  • Ben mail işlevini kullanmak istemem: diğer olasılıklar bol iyi test edilmiş ve functionnalities sürü, zaten gelişmiştir sağlamak kütüphaneleri kullanılarak vardır: simidini ;-) yeniden icat yok

Burada düşünmek için kütüphanelerin bir çift vardır:

Sen (vb, durdurmak ve döngü içinde geçen zaman olsun, başlangıç) sizin için ağır kaldırma yapmak için bu çok kullanışlı Timer sınıfını kullanabilirsiniz: PHPClasses: Timer.php.

Hi Thanks for all the answers! The best way i found was actually to simply sleep() between calls using the sleep() as i tested 400 mails, this took 17 seconds :)

Bu kullanıcı 450 sınırdan daha fazla göndermek mümkün değildir ... ama eğer ben bir süre önce ise bildirimde () 450'den fazla satır varsa her ... Bu uyku arasındaki böyleyse, kontrol biter Can sıkıcı veritabanları olmadan çalışıyor :)

Teşekkürler!