Alıcıları yüzlerce posta göndermek nasıl?

5 Cevap php

Şimdi ben bu döngü ile e-postalar göndermek yapın:

while($data = mysql_fetch_assoc($resultat)){
    ...
    sendMail();
}

function sendMail(){
    ...
    mail($to, $subject, $text, $headers);
}

Ama bu anlayabiliriz böylece bellek verimli değildir. Komut 1000 alıcılarına göndermek gerekir.

Eğer daha iyi bir şekilde bunu nasıl biliyor musunuz? Ben basit tutmak istiyorum ve herhangi bir çerçeve kurmak için alışkanlık yok.

5 Cevap

Bir cron işi bir "not" bırakın. Diğer bir deyişle, bir cron işi alır ve PHP oturum dışında uzun bir operasyon gerçekleştiren bir dosyaya yazmak.

Tabii ki cron :-) çalışacak gerçek komut dosyası PHP kullanabilirsiniz

Ben bu düşündüren nedeni: muhtemelen hold up your PHP session çok uzun süre asılı istemiyorum: Harici sürecine delege (muhtemelen) daha mantıklı.

Harici bir işlem için delege bu gerginlik rahatlatmak olabilir: Ayrıca her PHP oturum çok often limited in memory unutmayın.

Eğer bir çerçeve kurmak istemiyorum demek, ama ben PHP'nin posta gerçekten hızlı ve verimli bir e-posta büyük miktarda göndererek için inşa sanmıyorum. Ben denemek PEAR'ın Mail_Queue veya Mail olur.

Böyle Majordomo gibi liste yöneticisi yazılımı ile entegre içine bak. Bu yeterli bir iş e-postaları yayın yapmak kolay. Bu büyük bir iş yapmak zor, ve bu insanlar bu işi iyi yapıyor, kan ter ve gözyaşı bir sürü koyduk.

Sadece alıcılar e-posta bekliyoruz, ya da kendinizi gerçek zamanlı spam kara listeye koymak alma sonunda, ve muhtemelen host tekme kendi ağına kapalı olacak dikkatli olun.

Listman, sympa, Majordomo veya diğer yüzlerce birini kullanarak bir posta listesi kurmak - Bu sorunu yaklaşım birçok yolu vardır, bir posta listesi yöneticisi ile çalışma MightyE fikri muhtemelen yapmak için "Right Thing (tm)" dir liste yöneticilerine posta. Onun PHP script yönetmek için genellikle kolay ve daha sonra e-posta listesi adresine bir e-posta göndermek ve yönetici dinlenme yapalım.

Söyleniyor, bu çözüm olmayan bazı önemsiz kurulum gerektirir ve (yani her bir e-posta adresleri farklı bir alt kümesi gönderilir) dinamik hedef e-posta oluşturmak için gerektiğinde uygulamak çok zor olmanın ciddi kısa Çükü vardır.

Başka basit bir yolu (o kadar aşağı seçildi bir ayıp olduğu) justastefan cevabı bir büküm kullanmaktır: ciddi sorunları var ama çalışmak için yapılabilir.

Yapmanız gereken şey, PHP, senaryonun mail() rutin bir yerel MTA sağladığını emin olmaktır. Bu Linux / BSD sunucularda varsayılan kurulum. Ayrıca bu tür postfix veya exim olarak iyi bir MTA kullandığınızdan emin olun. Eğer toplu e-posta göndermek istediğinizde, sonra göndermek için BCC başlıkların listesini oluşturun:

$bcc = array();
while($data = mysql_fetch_assoc($resultat)){
    $bcc[] = "Bcc: {$data['email']}";
}
sendMail($bcc);

function sendMail($extraheaders){
    ...
    mail($to, $subject, $text, array_merge($headers, $extraheaders));
}

Bu oldukça etkili bir yoldur - BCC başlıkları oldukça kompakt ve sadece mail() doğrudan teslim yerel MTA hizmeti tarafından çözümlenir.

Aksi alıcıların posta sunucuları büyük olasılıkla "spam" olarak e-postalarınızı bayrak olacak, dikkat çekmek için gereken birkaç uyarılar vardır:

  1. Her e-posta da orada gönderilecektir - Daima kabul (ve muhtemelen sessizce göz ardı) e-postalar alabilirsiniz adresi 'için' geçerli olduğundan emin olun. Bu adres meşru bakmak gerekir 'için'.
  2. Eklemek için emin olun "Reply-To" kolay alıcıların size cevap için yapmak için bir e-posta adresi ile header.
  3. Bir eksik veya geçersiz "Return-Path" başarısız otomatik e-postalar için tek ve en olası nedeni - e-posta sekerek kabul edebilir, geçerli bir e-posta adresi geçerli bir "Return-Path" başlığı ayarlamak için emin olun.

AJAX muhtemelen bu tür operasyonlar için en iyisidir.

AJAX ile, bir sonraki kullanıcıya bir e-posta göndermek için sadece işlevi içeren küçük bir *. Php-File arayabilirsiniz. Saniye her demet denir ve bitirdiniz.

Eğer istemci komut dosyası sevmiyorum Tabii ki, bu tür operasyonlar PHP ile yönetmek oldukça zor hale gelir.