Sunucu sınırını aşmasını önlemek için PHP e-posta geciktiriyor

3 Cevap php

Tamam, işte benim sorunum:

I have a list of members on a website, and periodically one of the admins my site (who are not very web or tech savvy) will send a newsletter to the memberlist. My current memberlist is well over 800 individuals long.

Yani, Gizli başlığında listelenen üyeleri ile, tam Göster Üye için e-posta gönderir bir e-posta komut dosyası yazdı.

Ancak, benim ana sunucu görünüşe üyeleri Gizli alanında listelenen bile aşan saatte 300 e-postalar, bir sınırı olduğunu keşfetti ettik. (Ben ... Bcc davranışı listedeki her isim için ayrı e-postalar göndermek için olduğunu daha önce farkında değildi)

Biraz düşündükten sonra, benim tek çözüm benim komut bir saat bekleyin ve sonraki üç yüz ikinci bir e-posta göndermek, başka bir saat bekleyin, sadece ilk 300 e-postaları sadece e-posta göndermek için sonuca geldik ve bu yüzden bütün üye listesine e-posta gönderene kadar üzerinde.

Looking around on the internet, I've seen some other solutions people have come up with for delaying emails in PHP. Sleep() is obviously not an option, because I can't just leave the script open and running for 3 or four hours. I've seen some people suggest cron jobs, but I'm not sure how feasible it would be to create three new cron jobs every time I send an email, use them once, and then delete them afterward. The final (and what I think is the smartest) solution I've seen, is to have a table in my database to temporarily store the emails to be delayed and sent later, and then create a cron job that checks this sql table every hour or so, compares the timestamp of the row to the current timestamp, and then sends the email if an hour has passed.

Yani seni önerirsiniz hangi yöntem tüm soruyorum. Ben tamamen baktım daha kolay bir çözüm (farklı bir hosting planı almak kenara! Ha.) Var mı, yoksa veritabanı / cron işi yaklaşımı daha bunu yapmak için temizleyici bir yolu var mı?

tl;dr: Ben 300/hr beni sınırlayan bir sunucu üzerinde bir saat göndermek için> 800 e-postalar var. PHP kullanarak, e-posta gönderme kişi, sadece tıklayın gerektiğini bir şekilde bu sorunu aşmanın bir yolunu bulmak "gönderin."

3 Cevap

Bir Gearman kuyruğuna bu göndermek ve daha sonra uygun uyku çağrıları ile bir Gearman işçi olabilir. Bkz http://gearman.org/ ve http://php.net/gearman

Eğer kurulum için gönderilen iletilerin bir havuzundan çeker ve cron'nun sırasında X EVERYTIME onun vadede işleyen bir karıştırma işlevi gerekir gibi geliyor. Sonra gönderilen ve kim iletileri izleyen bir tablo olurdu, bu yüzden e-postalar aldı kim takip edebilirsiniz.

Ben bir kuyruk oluşturmak tavsiye ederim, ve kuyruğundan öğelerin süreci X sayısı her zaman e-posta göndermek gerekiyor. Mesajlar gönderen sadece kuyrukta e-posta yerleştirir ve işlem kodu o dönemde öğelerin sayısını gönderme öğeyi alır. Bazen hataları olacak ve kuyrukta kullanımı basit iyileşme sağlayacaktır. Onlar işlendiğinde sadece sıradan öğeleri kaldırmak.

Sen kuyruğa olarak hareket için basit bir veritabanı tablosunu kullanabilirsiniz ancak bir uzman kuyruk çözümü kullanmayı tercih edebilir.

Başka bir öneri Strongmail gibi harici e-posta hizmetleri içine bakmak olacaktır. Bu saatte daha fazla e-posta göndermek yardımcı olacaktır.