• 16-03-2021, 21:03:54
    #1
    Merhabalar,
    Veritabanımı oluşturdum basit bir şekilde ilerliyorum.
    Mail atabiliyorum ama o gün birden fazla doğum günü olan var ise sadece sqlden ilk çektiğine mail atıyor diğerlerine mail atmıyor.
    Kodlarım şu şekilde;

    $gun = date('j'); 
            
            $ay = date('n'); 
            echo $gun;
    
            $calisansor=mysql_query("select * from calisanlistesi Where Gun = $gun and Ay = $ay");
            while($calisanbilgi=mysql_fetch_array($calisansor))
                {
                $isim = $calisanbilgi['AdSoyad']; 
                $mailadresi = $calisanbilgi['MailAdresi'];
    
                require("class.phpmailer.php");
                $mail = new PHPMailer(); 
                $mail->IsSMTP(); 
                $mail->SMTPDebug = 1; 
                $mail->SMTPAuth = true; 
                $mail->SMTPSecure = 'tls'; 
                $mail->Host = "SMTP.office365.com";
                $mail->Port = 587; // or 587
                $mail->IsHTML(true);
                $mail->SetLanguage("tr", "phpmailer/language");
                $mail->CharSet  ="utf-8";
    
                $mail->Username = "erkutcin@***.com.tr"; 
                $mail->Password = "****"; 
                $mail->SetFrom("erkutcin@****.com.tr", "Erkut Cin");
    
                $mail->AddAddress("$mailadresi"); 
    
                $mail->Subject = "Doğum Günü Bildirisi";
                $mail->Body = "Sayın $isim Doğum günün kutlu olsun ";
    
                if(!$mail->Send()){
                                echo "Mailer Error: ".$mail->ErrorInfo;
                } else {
                                echo "Message has been sent";
                }
                }
  • 16-03-2021, 21:15:42
    #2
    SEO Expert
    herkese aynı anda email göndermek gizliliğe aykırı, çünkü alıcılar diğer email adresleri görebilir. bu yüzden tüm email adresleri çekerek döngüyle yinelemek daha mantıklı.
  • 16-03-2021, 21:21:52
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Rothstein adlı üyeden alıntı: mesajı görüntüle
    herkese aynı anda email göndermek gizliliğe aykırı, çünkü alıcılar diğer email adresleri görebilir. bu yüzden tüm email adresleri çekerek döngüyle yinelemek daha mantıklı.
    Bu kod zaten aynı and herkese göndermiyor. Sırayla gönderiyor.

    Sorunun çözümüne gelince; mail gönderme işlemi biraz zaman aldığından server ilk işlemi gerçekleştirirken diğer mail gönderim işlemlerini yapamıyor. Sıraya da alamadığından sadece ilk kiiye gidiyor. Neden sıraya alamıyor onu bilmiyorum ama.
    While döngüsünün sonuna sleep(15); eklersen her mail arasında bir müddet bekelyip teker teker gönderimi yapar diye düşünüyorum.

    Kodu aşağıdaki şekilde değiştirmelisin.

    $gun = date('j'); 
             
            $ay = date('n'); 
            echo $gun;
     
            $calisansor=mysql_query("select * from calisanlistesi Where Gun = $gun and Ay = $ay");
            while($calisanbilgi=mysql_fetch_array($calisansor))
                {
                $isim = $calisanbilgi['AdSoyad']; 
                $mailadresi = $calisanbilgi['MailAdresi'];
     
                require("class.phpmailer.php");
                $mail = new PHPMailer(); 
                $mail->IsSMTP(); 
                $mail->SMTPDebug = 1; 
                $mail->SMTPAuth = true; 
                $mail->SMTPSecure = 'tls'; 
                $mail->Host = "SMTP.office365.com";
                $mail->Port = 587; // or 587
                $mail->IsHTML(true);
                $mail->SetLanguage("tr", "phpmailer/language");
                $mail->CharSet  ="utf-8";
     
                $mail->Username = "erkutcin@***.com.tr"; 
                $mail->Password = "****"; 
                $mail->SetFrom("erkutcin@****.com.tr", "Erkut Cin");
     
                $mail->AddAddress("$mailadresi"); 
     
                $mail->Subject = "Doğum Günü Bildirisi";
                $mail->Body = "Sayın $isim Doğum günün kutlu olsun ";
     
                if(!$mail->Send()){
                                echo "Mailer Error: ".$mail->ErrorInfo;
                } else {
                                echo "Message has been sent";
                }
                
                                 sleep(15);
      }
  • 16-03-2021, 21:36:40
    #4
    aturkoglu adlı üyeden alıntı: mesajı görüntüle
    Bu kod zaten aynı and herkese göndermiyor. Sırayla gönderiyor.

    Sorunun çözümüne gelince; mail gönderme işlemi biraz zaman aldığından server ilk işlemi gerçekleştirirken diğer mail gönderim işlemlerini yapamıyor. Sıraya da alamadığından sadece ilk kiiye gidiyor. Neden sıraya alamıyor onu bilmiyorum ama.
    While döngüsünün sonuna sleep(15); eklersen her mail arasında bir müddet bekelyip teker teker gönderimi yapar diye düşünüyorum.

    Kodu aşağıdaki şekilde değiştirmelisin.

    $gun = date('j');
            
            $ay = date('n');
            echo $gun;
     
            $calisansor=mysql_query("select * from calisanlistesi Where Gun = $gun and Ay = $ay");
            while($calisanbilgi=mysql_fetch_array($calisansor))
                {
                $isim = $calisanbilgi['AdSoyad'];
                $mailadresi = $calisanbilgi['MailAdresi'];
     
                require("class.phpmailer.php");
                $mail = new PHPMailer();
                $mail->IsSMTP();
                $mail->SMTPDebug = 1;
                $mail->SMTPAuth = true;
                $mail->SMTPSecure = 'tls';
                $mail->Host = "SMTP.office365.com";
                $mail->Port = 587; // or 587
                $mail->IsHTML(true);
                $mail->SetLanguage("tr", "phpmailer/language");
                $mail->CharSet  ="utf-8";
     
                $mail->Username = "erkutcin@***.com.tr";
                $mail->Password = "****";
                $mail->SetFrom("erkutcin@****.com.tr", "Erkut Cin");
     
                $mail->AddAddress("$mailadresi");
     
                $mail->Subject = "Doğum Günü Bildirisi";
                $mail->Body = "Sayın $isim Doğum günün kutlu olsun ";
     
                if(!$mail->Send()){
                                echo "Mailer Error: ".$mail->ErrorInfo;
                } else {
                                echo "Message has been sent";
                }
                
                                 sleep(15);
      }
    Bunu denedim sadece sorgudan gelen ilk mail adresine mail atıyor diğerlerine atmıyor hata vs vermiyor. 1 dakika delay verdim ama yine de pek etkili olmadı. Başka nasıl bir yöntem deneyebilirim acaba...
  • 16-03-2021, 21:40:37
    #5
    bir tane mail önderip gönderim süresini ekleyebilirsin veya bu scripti bir defa mail gönderecek şekilde ayarlayıp, başka bir script ile while döngüsü ile bu scripti çağırırsın. Her olumlu dönüşte yenisini gönderir. Bilmem anlatabildim mi?
  • 16-03-2021, 21:48:45
    #6
    Kullandığın smtp nin art arda email gönderme süresi olabilir.
  • 18-03-2021, 13:39:34
    #7
    İstediğim gibi çalışacak bir hale getirdim. Başkalarına da yararlı olabileceği için paylaşıyorum.
    $gun = date('j'); 
    $ay = date('n');
    
    $query = "select AdSoyad,MailAdresi from calisanlistesi Where Gun = $gun and Ay = $ay";
    $result = mysqli_query($link, $query);
    $row = mysqli_fetch_row($result);
    require 'class/class.phpmailer.php';
    foreach($result as $row)
        {
            $mail = new PHPMailer;
            $mail->IsSMTP();                                
            $mail->Host = 'SMTP.office365.com';        
            $mail->Port = '587';                                
            $mail->SMTPAuth = true;                            
            $mail->Username = 'erkutcin@***.com.tr';                    
            $mail->Password = '*******';                    
            $mail->SMTPSecure = 'tls';                            
            $mail->From = 'erkutcin@***.tr';            
            $mail->FromName = 'Erkut Cin';                    
            $mail->AddAddress($row["MailAdresi"], $row["AdSoyad"]);    
            $mail->WordWrap = 50;                            
            $mail->IsHTML(true);
            $mail->SetLanguage("tr", "phpmailer/language");
            $mail->CharSet  ="utf-8";        
            $mail->Subject = $row["AdSoyad"].' Doğum Günün Kutlu Olsun'; 
            $mail->Body = '
            
            <img src="https://www.hediyesepeti.com/blog/wp-content/uploads/2017/03/dogum-gunu-kutlama-kartlari-4.jpg">
            
            ';
            $mail->AltBody = '';
            $result = $mail->Send();                        
     }
    ?>