50.000+ üye'ye en mantıklı mail gönderme yönetmi nedir ?

0
Onaylı Üye
Üye
Katılım
19 Temmuz 2005
Mesajlar
2,014
Tepki puanı
1
Konum
about:blank
+ bir program kullanmadan mysql+php ile mail gönderiyorum. Bu mail gönderme işlemi çok uzun sürüyor ve beni çok yoruyor. Önerisi olan varmı ?

Daha doğrusu php ile yol göstermenize ihtiyacım var.
 
K
kepche
Misafir
verileri database den çekerek sırayla mail gönderebilirsin (muhtemelen öyle yapıyorsun), seni bilmiyorum ama server ını yoracağı kesin :)
yol gösterme konusunda biraz daha detay verebilirsen, bilgim olduğu kadar yardımcı olmaya çalışırım. 50.000 kişiye mail gönderme işi kısa sürer mi onu bilmiyorum ama..
 
0
Onaylı Üye
Üye
Katılım
19 Temmuz 2005
Mesajlar
2,014
Tepki puanı
1
Konum
about:blank
detayı şu
sql'den maili alıp id sıralamasına göre tek tur mail attırıyorum sizine tahmin edebileceğiniz gibi. Kodlara gelince bildiğiniz veri çekme komutu, bildiğiniz mail fonksiyon komutları.

1. adım: select mail from table;
2. adım: mail gönderimi.
3. adım: mail atılan satır update ile mail atılamaz hale getiriyorum.
 
0
Onaylı Üye
Üye
Katılım
1 Şubat 2005
Mesajlar
3,367
Tepki puanı
7
*siber*' Alıntı:
detayı şu
sql'den maili alıp id sıralamasına göre tek tur mail attırıyorum sizine tahmin edebileceğiniz gibi. Kodlara gelince bildiğiniz veri çekme komutu, bildiğiniz mail fonksiyon komutları.

1. adım: select mail from table;
2. adım: mail gönderimi.
3. adım: mail atılan satır update ile mail atılamaz hale getiriyorum.
Kendi pc den bunu yapman mümkün değilmidir. Sadece fikir yürütüyorum.
 
K
kepche
Misafir
bir yolu, mail adreslerini aralarına ";" koyarak uçuca eklemek,
bir diğer yolu da fsopen fsockopen() kullanarak socket açaraktan bağlanmak olabilir.
php.net de şu adreste bir örneği var, bağlandıktan sonraki kısmını döngüye sokaraktan yapabilirsin sanırım.
Eğer server kasar dersen, LIMIT kullanarak, parça parça göndermeyi deneyebilirsin. Bunun için basitçe, kendin kullanacağın ve sorgunun limit kısmı için başlangıç ve miktar değerlerini $_POST veya $_GET den alabileceğin birşeyler de yazabilirsin.

PHP Manual den örnek kod:
PHP:
<?php

   $handle = smtp_connect($smtp_server, 25, 30, 1, 1, 1);
   echo smtp_command($handle, "EHLO $domain\r\n", 1, 1);
   echo smtp_command($handle, "MAIL FROM:<$from_mail>\r\n", 1, 1);
   echo smtp_command($handle, "RCPT TO:<$to_mail>\r\n", 1, 1);
   echo smtp_command($handle, "DATA\r\n", 1, 1);
   echo smtp_command($handle, "$message\r\n.\r\n", 1, 1);
   // don't do it like this - it will hang up
   // echo smtp_command($handle, "$message", 1, 1);
   // echo smtp_command($handle, "\r\n.\r\n", 1, 1);
   echo smtp_command($handle, "QUIT\r\n", 1, 1);
   smtp_close($handle);
  
  
   function smtp_connect($host, $port, $timeout=30, $echo_command=False, $echo_response=False, $nl2br=False)
   {
       $errno = 0;
       $errstr = 0;
       if($echo_command)
       {
           if($nl2br) { echo nl2br("CONNECTING TO $host\r\n"); }
           else { echo "CONNECTING TO $host\r\n"; }
       }
       $handle = fsockopen($host, $port, $errno, $errstr, $timeout);
       if(!$handle)
       {
           if($echo_command)
           {
               if($nl2br) { echo nl2br("CONNECTION FAILED\r\n"); }
               else { echo "CONNECTION FAILED\r\n"; }
           }
           return False;
       }
       if($echo_command)
       {
           if($nl2br) { echo nl2br("SUCCESS\r\n"); }
           else { echo "SUCCESS\r\n"; }
       }
       $response = fgets($handle,1);
       $bytes_left = socket_get_status($handle);
       if ($bytes_left > 0) { $response .= fread($handle, $bytes_left["unread_bytes"]); }
       if($echo_response)
       {
           if($nl2br) { echo nl2br($response); }
           else { echo $response; }
       }
       return $handle;
   }

   function smtp_command($handle, $command, $echo_command=False, $nl2br=False)
   {
       if($echo_command)
       {
           if($nl2br) { echo nl2br($command); }
           else { echo $command; }
       }
       fputs($handle, $command);
       $response = fgets($handle,1);
       $bytes_left = socket_get_status($handle);
       if ($bytes_left > 0) { $response .= fread($handle, $bytes_left["unread_bytes"]); }
       if($nl2br) { return nl2br($response); }
       else { return $response; }
   }
  
   function smtp_close($handle)
   {
       fclose($handle);
   }
?>
 
0
Onaylı Üye
Üye
Katılım
19 Temmuz 2005
Mesajlar
2,014
Tepki puanı
1
Konum
about:blank
kepche' Alıntı:
bir yolu, mail adreslerini aralarına ";" koyarak uçuca eklemek

Önerin için teşekkürler. Buda aynı yavaşlığı sağlamaz mı ?
 
K
kepche
Misafir
Bunun için şöyle bir örnek var
PHP:
if ($sendMail()) echo "mail sent";

function sendMail() {
$subject = "";
$message = "";
$toAddr = "";
$sql = "SELECT DISTINCT email FROM members";
$result = mysql_query($sql);
while ($row = mysql_fetch_row($result)) {
    $toAddr .= "$row[0];";
   }
if (mail($toAddr,$subject,$message)) return true;
else return false;
}

Bunu değiştirebilirsin, 50.000 maili birden yaparsan her türlü yavaş olması muhtemel.

Şöyle bişey yaptım, hata yoktur umarım bi incele istersen:
PHP:
<?
$basla = $_GET['basla'];
$kayit = 1000;
$toplam = 50000;

if ($sendMail()) echo "$basla dan itibaren $kayit adet mail gönderildi.<br />";

function sendMail() {
$subject = "";
$message = "";
$toAddr = "";
$sql = "SELECT DISTINCT email FROM members LIMIT $basla , $kayit";
$result = mysql_query($sql);
while ($row = mysql_fetch_row($result)) {
    $toAddr .= "$row[0];";
   }
if (mail($toAddr,$subject,$message)) return true;
else return false;
}

$i = 0; //$i = $basla + $kayit; dersen, kullandığın linki bir daha göstermemiş olur.
do{
        echo "<a href=\"mail.php?basla=$i\">$i den itibaren</a><br />";
        $i += $kayit;
}while($i < $toplam);

?>
1000 er adet gönderiyor her seferinde, en alta da linkleri listeliyor. Db yorulmasın dersen mantıklı olabilir.
Hatta tek tek bunlara mı tıklayacağım diyorsan, üretilen adresi javascript le belirli bir süre sonrasında redirect de yapabilirsin istersen. sana kalmış. kolay gelsin.
 
0
Onaylı Üye
Üye
Katılım
12 Haziran 2006
Mesajlar
124
Tepki puanı
0
peki bunların junk a yakalanma oranı nedir acaba ve spam deglde üyelerimize atmak için ama junk a yakalanmamak için şiddetle onerılerınız nelerdır
 
0
Onaylı Üye
Üye
Katılım
14 Ağustos 2004
Mesajlar
768
Tepki puanı
0
Konum
IZMIR
toplu mail gonderimlerinde email adresimiz kara listelere kaydedilmiyor mu?
 
0
Onaylı Üye
Üye
Katılım
1 Şubat 2006
Mesajlar
32
Tepki puanı
0
PHP:
<?


include("opt.ini");
$fileaddr = "addr.ini";//Ôàéë â êîòîğîì íàõîäèòÿòüñÿ e-mail'û
$filemsg  = "msg.ini"; //òåêñò ñîîáùåíèÿ


If ($page == "send") {
 $f = file($fileaddr);
 $f2 = file($filemsg);
 $msg = "";
 for ($s = 0; $s < count($f2); $s++) {
  $msg .= trim($f2[$s]) . "\n";
 }

 for ($i = $nf; $i < $nt; $i++) {
  mail(trim($f[$i]), $subject, $msg, "From: $fromname <$frommail>\nContent-Type: text/plain;\n        charset=windows-1251\nX-Priority: $priority");
 }
 $b=$i++;
 echo "<p><b>$b Adet Mailiniz Başarıyla Gönderildi.</b></p>\n";
}
Else {
 $f2 = file($fileaddr);
 for ($e = 1; $e < ceil(count($f2) / 500 +1); $e++) {
  If ($e*500 > count($f2)) {
   $nt = count($f2);
  }
  Else {
   $nt = $e*500;
  }
  $nf = $e*500-500;

  echo "<p><a href='index.php?page=send&nf=$nf&nt=$nt' target='_blank'>$nf-$nt Adet Mail Gönderilmeyi Bekliyor... Göndermek için TIKLA !</a></p>\n";
 }
}
?>

addr.ini diye bi dosya aç göndereceğin mailleri
[email protected]
[email protected]

şeklinde alt alta hepsini yaz.

msg.ini oluştur. onada göndereceğin mesajı yaz.

opt.ini oluştur ve onada
PHP:
<?
$subject  = "konu";		   // Konu
$fromname = "INFO";				  // Gönderenin Adı 
$frommail = "[email protected]";			 // Mail Kimden Geliyor!
$priority = "1";				// 1-max; 3-normal; 5-min
 ?>

alıntıdır..

denedim çalışıyor.1200 kişiye attım.10-15 dk sonra hepsine gitti.

kolay gelsin.
 
O
OkYaNuS
Misafir
teşekkürler denedim gerçekten çalışıyor. bundaki türkçe karakter sorununu nasıl halledebiliriz peki
 
Geri
Üst