şöyle bir yöntem izleyebilirsiniz arkadaşlar.
öncelikle gönderilecek mailleri tek seferde göndermeyi denemeyin bu yapılacak en kötü davranış olur , belirli bir zaman bekleyerek gruplar halinde atın mailleri, peki bunu nasıl yapacağız derseniz. aşağıdaki yolu izleyin.
<?PHP
ob_start('gz_handler'); // Header alredy sent hatasını önlemek için kullanın.
header ("Content-Type: text/html; charset=iso-8859-9");
// İşlem Zaman aşımına uğramasın diye aşağıdaki fonksiyonu ekleyin
function mail_set_time_limit($limit) {
if (!get_cfg_var('safe_mode')) {
set_time_limit($limit);
}
}
// Mailler için bir veritabani bağlantısı yapmadan txt dosyasından okutarak gönderelim. ama illa veritabani bağlantısı yapacağım diyorsanız değerlerin tamamını bir değişkene atayarak explode ile bölerek işlem yapmanız performans açısından lehinizedir.
// Kaç tane mail adresi var onu öğrenelim , txt dosyasında her mail adresi bir satırda olacak şekilde yazılmış diye düşünüyorum.
$dosyaadi = "maillistesi.txt";
$satirlar = file($dosyaadi);
$satirsayi = count($satirlar);
// $_GET kullanılacağı için ilgili veriyi güvenli hale getirelim
// Bu işlem için aşağıdaki fonksiyonu kullanalım.
function VeriDuzenle($str)
{
$str = htmlspecialchars("$str", ENT_QUOTES);
$str = preg_replace("'\s+'"," ",$str);
$str = ltrim(rtrim($str));
return $str;
}
// Ayarlarımızı yapıyoruz , bir seferde kaç mail gönderilecek , kaç saniye beklenecek gibi.
$gonder = VeriDuzenle($_GET["gonder"]) ? VeriDuzenle( $_GET["gonder"]) : 0;
$kactane = 50; // her defasında kaç mail gönderilecek
$araver = 2; // her seferinde kaç saniye ara verecekbu bölüme kadar maillistesi.txt dosyasından göndereceğimiz mail sayısını öğrendik , zaman aşımına uğramaması ve header hatası vermemesi için gereken kısımları yazdık , her defada kaç mail gönderip ne kadar bekleyeceğini değişkenlere atayarak ayarladık.
şimdi bir for döngüsü yaratarak her seferinde bir sonraki grubun gönderilmesini sağlıyoruz.
// üstteki koddan devam
for($i=$gonder; $i<$gonder+$kactane ; $i++)
{
// bu döngü ne yapar , eğer $gonder değeri $gonder+$kactane değerinden küçükse betik çalışmaya devam eder , yani ilk çalıştırdık ve listemizde 500 adres var her seferinde 50 mail göndereceğiz bu durumda
//$i=$gonder; $i<$gonder+$kactane şu değerleri almış olacaktır
//$i=0 ; $i<0+50 , bir sonraki calışmasında değerler şu şekilde artacaktır.
//$i=50; $i<50+50
// mail gönderim kodunuz burada çalışacak
}
// şimdi de listedeki mail sayısı ile gonderilen mail sayısına bakalım eğer gönderilen sayı daha küçükse sıradaki gruba gondermesi için betiği tetikleyelim.
if(count($satirlar) > ($gonder+$kactane))
{
header("refresh: $araver; url=mailgonder.php?gonder=".($gonder+$kactane)); // belirttiğimiz saniye aralığında sayfayı yeniler
}
// yukarıdaki yönlendirme şu şekilde olacak
// 1nci döngüde yönleneceği adres | mailgonder.php?gonder=50
// 2nci döngüde yönleneceği adres | mailgonder.php?gonder=100
// dolayısıyla yukarıda yazılan for dongusu kaçtan başlayıp kaça kadar çalıştığını bilecekyukarıdaki mantıkla mail gönderiminde max_execution_time sınırı sıkıntısını yaşamadan mail gönderebilirsiniz.
Eğer HTML içerikli mail göndermek istiyorsanız mail gönderim kodunuzun header bilgisini şu şekilde tanımlayın.
$headers = "From: info@benimsiteminadresi.org\n" .
'X-Mailer: PHP/' . phpversion() . "\n" .
"MIME-Version: 1.0\nContent-Type: text/html;charset=iso-8859-9\n" .
"Content-type: text/html; charset=iso-8859-9\n".
"Content-Type: text/html; charset=utf-9\n" .
"Content-Transfer-Encoding: base64t\n";hepinize kolay gelsin.