Html e-posta bir sürü göndermek için en iyi yolu / sınıfı nedir?
(Her posta gönderildikten adresin bağlı olduğu) bir mysql veritabanından bilgi (içermesi gerekiyor)
Önce ben bir geçici tablo ihtiyaç bilgileri (değil temporary, ben bittim sonra açılan normal bir tablo) saklayın.
Sonra ben gitmek gibi işlenmiş kayıtları silme, postaları oluşturmak ve bir "giden" tabloya oluşturulan postaları koydu.
Son olarak, bir komut dosyası "giden" masanın üzerinden M kayıtları alınarak her N dakikada patlar: bir mail gönderir ve daha sonra giden tablodan o posta siler.
Neden geçici tablo? Bu bütün olur hangi sunucu çok sıkı zaman kısıtlamaları vardır çünkü. Yukarıdaki yöntem kullanılarak me kısmen postaları oluşturmasına olanak sağlar; Eğer güvenli bir şekilde çift postalar üretilen endişesi olmadan nesil faz yeniden çalıştırabilirsiniz. Yani işi öldürme sunucusunun rağmen, komut ilerleme yapar.
Gönderen komut sunucunun kısıtlamaları içinde çalışmak için yeniden (60 / N) * M postaları bir saat, gönderir.
Ben Armut paketleri Posta (http://pear.php.net/package/Mail) ve Mail_Mime kullanarak öneririm (http://pear.php.net/package/Mail_Mime).
Eğer bir sıralama sistemi gerekiyorsa, (http://gearman.org/) Gearman deneyebilirsiniz
Ben kullanmak Zend_Mail. Aşağıdaki örnek (dan docs) tek bir SMTP bağlantısı üzerinden birden fazla postalar göndermek için nasıl gösterir:
// Create transport
$config = array('name' => 'sender.example.com');
$transport = new Zend_Mail_Transport_Smtp('mail.example.com', $config);
// Set From & Reply-To address and name for all emails to send.
Zend_Mail::setDefaultFrom('sender@example.com', 'John Doe');
Zend_Mail::setDefaultReplyTo('replyto@example.com','Jane Doe');
// Loop through messages
for ($i = 0; $i < 5; $i++) {
$mail = new Zend_Mail();
$mail->addTo('studio@example.com', 'Test');
$mail->setSubject(
'Demonstration - Sending Multiple Mails per SMTP Connection'
);
$mail->setBodyText('...Your message here...');
$mail->send($transport);
}
// Reset defaults
Zend_Mail::clearDefaultFrom();
Zend_Mail::clearDefaultReplyTo();
Sadece göndermek için her iletiye özel veritabanından veri almak için döngü değiştirmek gerekir. Ayrıca, Zend_Mail
faydalanmak için entire çerçeve gerekmez.
Take a look at: http://framework.zend.com/manual/en/zend.mail.multiple-emails.html
Ben ilk göz olduğunu işlemek için biraz zaman alması muhtemel olduğunu düşünüyorum - yani bir senkron web isteği olarak yapılmamalıdır - bkz
http://stackoverflow.com/questions/2212635/best-way-to-manage-long-running-php-script
HTML e-posta oluşturma konusunda konularda her türlü o vardır. Bu tür e-postanın kendisi üretmek için PHPMailer olarak off-the-raf paketlerinden birine de bir göz atmak isteyebilirsiniz. Içeriği çok karmaşık ise Alternatif olarak, bir çiftleşmiş sistemini kullanarak, belki de, bir web sayfası olarak ayarlamayı düşünebilirsiniz - ama herhangi bir harici erişimi kısıtlamak için hatırlıyorum. örneğin
<?php
if ($_SERVER["REMOTE_ADDR"]!='127.0.0.1') {
die ('NO ACCESS!');
}
$send_to=$_GET['email'];
$dbh=mysql_connect(...);
....
Sonra komut:
....
$content=file('http://localhost/generate_email.php?email='
. urlencode($db_row['recipient']));
mail($db_row['recipient'], $subject, $content);
HTH
C.