Nasıl php tüm kullanıcılar için bir e-posta göndermek için?

10 Cevap php

Ben MySQL veritabanı 1000 abone kullanıcımız var, diyelim. Ben tüm kullanıcılara bir e-posta göndermek isterseniz, ben ne yapmalıyım?

EDIT:

(Herkes konuşuyor) cron işleri nedir? Örnek verebilir misiniz?

10 Cevap

Ben gönderilmesi gereken tüm e-posta ile bir veritabanı tablo oluşturma öneririm. Bu oldukça hızlı bir şekilde yapılabilir. Oradan, e-postalar onu, üst satırı alır ve satır siler tür bir cron işi kurmak. Eğer angarya ve kullanıcı parallelize Bu şekilde e-postalar tepki sayfa yüklenmeden önce gönderilmesi için beklemek zorunda değildir.

Döngü ve bu şekilde posta fonksiyonu için bir bir arada kullanma:

$rs = mysql_query('SELECT email from emailList LIMIT 0, 10');

while(list($email) = mysql_fetch_row($rs))
{
  // Send Email
  mail($email, 'Your Subject', 'Your Message');
}

Ama herkes bağışta bulunan kimse tek seferde tüm çalıştırın diyor. Ben ciddi herhangi bir sunucu 1000 e-posta isteklerini yapma yükünü kaldırabilecek şüpheliyim. 50 e-posta ve onları gönderir - Her çalıştırmak Geri alma üzerine sizin kodu 30 Diyelim ki böyle çalışan bir cron işi çalıştırın.

Için en iyi şey, sunucu, sakin genellikle olduğunda görevi yürütür seçtiğiniz dilde bir cron işi yazma. PHP kullanmak istiyorsanız, yine bir cron işi kullanın. Bir sayfa talebine yanıt verirken bunu yapmayın WTF-style.

Ben, herkes ne söyledi yapıyor öneririz mesajı, konuyu ve e-posta adresini içeren ayrı bir veritabanı tablosu oluşturmak istiyorum. Ben de (http://phpmailer.codeworxtech.com/), SMTP e-postalar göndermek için PHPMailer kullanabilirsiniz.

(stefan mai önerilen) oluşturma kod kod göndererek postayı ayırmak. Bir tabloya tüm adresleri / konular / organları yazın ve daha sonra tabloyu işlemek.

sonra, cron işi sadece her x dakika çalıştırın ve sadece y postalar gönderin. Eğer bir kerede çok fazla postalar göndermek, düşündüğünüzden daha hızlı spam olarak işaretlendi alabilirsiniz. başarılı gönderme sadece tablodan posta-görevi kaldırmak.

  • Eğer toplu posta göndermek için var eğer bunu (örneğin haber bültenleri)
  • posta (kayıt teyidi gibi) anında gönderilen olmalıdır eğer bunu yapmayın - Kullanıcıların beklemek nefret

phpmailer veya swiftmailer gibi bir kitaplığı kullanın.

Ayrıca PHP List kullanarak deneyebilirsiniz.

PHP listesi yükleyin, e-posta adresleri sizin DB ihracat ve CSV olarak PHP Listesi içe. Sonra, kullanıcının yönetmek vb ve izleme tıklayın almak konusunda endişelenmenize gerek yok.

Her kullanıcı, satırlar boyunca bir şey için her e-posta almak için bir sorgu ayarlayarak başlayabilirsiniz:

SELECT email FROM users;

Eğer bir değişken olduğunu kaydettikten sonra bir foreach kombinasyonu () ve mail () her kullanıcı için bir e-posta göndermek için kullanabilirsiniz.

i tüm kullanıcılar ve e-postalar ve bir statü ile bir tablo yaratacak. Bu tabloyu işlemek için Kur 2 veya 3 CronJobs.

Php komut dosyası db (limit 30) 30 entrys getirme ve bir foreach döngüsü ile bunları işlemek. Her çalıştırdıktan sonra "e-posta" durumunu değiştirmek veya db gelen girdiyi silin.

Bu şekilde, sunucu sistem yükü işlemek mümkün olduğundan emin olabilirsiniz.

Her e-posta her kullanıcı için benzersiz olmalıdır? Eğer değilse, bir tek postaya bir BCC (Blind karbon kopya) eklemek, her kullanıcı için yeni bir mail göndermek yok. Bu SMTP sunucusu mutlu edecek.

Send postayı (Stefan Mai cevabı bu yapmak için harika bir yoldur) İstediklerim şekilde işleyen bir PHP komut dosyası yazın. (Bu size daha sonra hataları bulmak için bir yol bırakır) İş olduğunu kaydeder ve zaman çalıştığı şey yazmaz ki senaryoyu tasarlayın. Eğer belirlenen zamanda komut dosyasını çalıştırmak için cronu yapabilirsiniz Linux çalıştıran varsayarak.

Bir terminal oturumu içine crontab -e yazarak, cron işleri düzenlemek. Daha sonra böyle bir şey (bu gece yarısı her gece işi çalıştırmak olacaktır) girin.

 0 * * * * wget -O - -q -t 1 http://www.example.com/mymailer.php