Zaman aşımına olmadan programlı Kişiselleştirilmiş toplu e-posta

3 Cevap php

Ben yaklaşık 5000 tüm dünyada insanlar, kendi kullanıcı adı ve dil kodları ile ilişkili her e-posta adresleri (bireysel kullanıcı tarafından sağlanır) 10.000 bir listesi var. Ben de e-posta istiyorum kullanıcıların farklı dillere çevrilmiş bir tek mesajım var. Şimdi, kullanıcı diline göre değişen e-postanın gerçek metinle, adresi her tek bir düz metin e-posta göndermek istiyorum, ve ben e-posta ediyorum kişinin adı ile kişiselleştirilmiş olur.

Çünkü kişiye özel gereksinimi ve sadece (bir çakışan ama farklı bir kullanıcı listesi ile ya da iki yıl başına) bir kez gönderilecektir olacağı gerçeği, resmi e-posta listesi üzerinden muhtemelen (ve tercihen) 'dir. 3. parti toplu e-posta servisi üzerinden de.

Programlama zamanını almamak, (tercihen) PHP bunu yapmak için en azından elle zaman alıcıdır yolu nedir? (Ben komut (lar) yazıyorum, ama mutlaka sonuna kadar kişi göndermek için "düğmesine basarak".) İdeal sonucu sadece e-tedarik (komut dosyasını çalıştırmak için tek bir komut yazmak zorunda gönderen kişidir liste) ve tüm e-posta daha fazla kullanıcı müdahalesi ile gönderilecektir. Bunun anlamı e-posta listesi tükenene kadar tekrar tekrar komut dosyasını çalıştırmak için cron işleri kurma gibi şeyleri önlemek için arıyorum.

Bu bir yıl önce önce yapıldı, ben göndermek PHPMailer onu beslemeden önce, sadece kullanıcı adı, e-posta adresini ve dil kodunu işleme hattı ile e-posta listesi doğrultusunda okumak ve o dışarı istediğiniz e-posta metnini oluşturmak bir PHP komut dosyası yazdı tek tek. Ben vardı sorun script aşımından oldu ve ben tekrar başlamak için doğru yerde e-posta listesini düzeltin böylece kalkıp beni nerede bilmeden. Ben elle komut dosyası zaman aşımına uğramayan ki yeterince kısa birkaç alt-liste halinde 1 e-posta listesini bölme sona erdi. Nasıl da zamanlamayı önlemek veya script elle yeniden başlatılabilir ve hiçbir kişi birden fazla e-posta gönderilir, böylece bilge e-posta adresi kadar olduğu takip edersiniz?

Vb kara listeye kaçınarak gibi, dikkate almak, diğer sorunlar nelerdir?

3 Cevap

Sen bellek ('memory_limit', xxMB ') belki ini_set işlevi set_time_limit hakkında okumak gerekir ve;

Sen çatallar (pcntl_fork) ardından üst (ana cli süreç sonlandığında) öldürür web süreç, bir php cli komut dosyası çalıştırabilirsiniz. Senaryoyu çalışan webserver iplik, daha sonra başka bir kod veya çıkış ile devam edebilirsiniz.

Şimdi cli çocuk süreç (A) çatal (ve ebeveyn olmak) ve e-posta gönderen bir çocuk (B) izleyebilirsiniz. Çocuk B ölürse, artık ana bir süreç tekrar çatal ve önceki kaldığı yerden yeni çocuk devam ediyor.

Eğer ana süreç ile (socket_create_pair) bir dosya / db / paylaşılan bellekte veya eşleştirilmiş prizler aracılığıyla e-posta gönderdi kim takip etmek zorunda.

Ben size fikir olsun umuyoruz.

PHP burada iş için doğru aracı değil - bir web sunucu bağımsız çalışır şey isteyeceksiniz (potansiyel onun tarafından tetiklenen rağmen) ya kesinlikle aşımları içine edeceğiz.

Örneğin, PHP system() işini yapmak için arka plana daha sonra bir veritabanına çatal gelen iş bilgileri okur başka bir komut dosyası (Perl? Python?), Dışarı olabilir.

Hiçbir Cron komut dedi - Eğer sunucu üzerinde Cron'un erişiminiz yok mu? Ya da endişe elle Cron işi bir posta işi dışarı gönderilecek olan her zaman kurmak isteyen değil mi?

Sen http://pear.php.net/package/Mail_Queue bakmak isteyebilirsiniz - Geçenlerde kullanarak oldum şey. Eğer kullanıcı adı verilen komut posta kuyruğuna defada tüm e-postaları dökümü olabilir. Bu sunucular arasında iletişim ile uğraşmak zorunda kalmazsınız çünkü aslında anında e-posta göndermek daha hızlıdır, ancak yerine sadece veritabanı.

Sonra, her birkaç dakikada, MAIL_QUEUE çağırır :: sendMailsInQueue komutu Cron çağrı başına gönderir e-postaların sayısına bir limit ile bir Cron komut dosyası var. Bu seni ilgilendirmez eğer Cron komut ile karışıklık olmaz - kuyruk boşsa, sadece çıkış olacak. E-posta sonra çağrı başına makul bir hızda sunucunun dışarı damlama olacaktır. Bu cron arama başına e-postaları sınırı nedeniyle zaman aşımı önleyecektir. Ayrıca aniden kerede sizin e-postalar bir sürü tarafından dövülmüş için mutlu olmayabilir, diğer posta sunucuları, sorun önlemeye yardımcı olacaktır.