• 17-08-2021, 16:00:18
    #1
    Arkadaşlar selam,

    PHPMailer kullanarak, belirttiğim koşulu sağlayan müşterilere mail gönderimi yapıyorum. (Örneğin gecikmiş fatura,aboneler,vs.) Mail gönderimi yaparken kişiye hitap etmek için aynı tablo üzerinde kullanıcının adını da tutuyorum. Fakat mail göndermek istediğimde tüm mailler DB'de kayıt olan son isim üzerinden gidiyor. Yani koşulu sağlayan tüm mail adreslerini mail gidiyor ama db'de kayıtlı olan son isim üzerinden gitmekte.

    Şöyle ki;

    include 'class.phpmailer.php';
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth = true;
    $mail->Host = 'mail.SiteAdresi.com';
    $mail->Port = 587;
    $mail->Username = 'noreply@[COLOR=#000000][FONT=Open Sans]SiteAdresi[/FONT][/COLOR] .com';
    $mail->Password = 'QwwwwZnww';
    $mail->SetFrom($mail->Username, 'Servis');
    $mail->From = "bilgi@[COLOR=#000000][FONT=Open Sans]SiteAdresi[/FONT][/COLOR] .com";
    $mail->CharSet = 'UTF-8';
    $mail->Subject = 'Gecikmiş Ödeme Bildirimi -';
    $aboneler = $db2->prepare("SELECT * FROM systemCustomerServices WHERE servisDurum=9");
    $aboneler->execute();
    
    if ($aboneler->rowCount(PDO::FETCH_ASSOC)){
        foreach ($aboneler as $row) {
        extract($row);
    
            $mail->addBCC($row['servisMusteriMail']); //burada [COLOR=#000000][FONT="Open Sans"]servisDurum=9[/FONT][/COLOR] koşulunu sağlayan e-mail adreslerini alıyorum.
            $icerikMail = "Sayın $servisMusteriAdi ödenmemiş faturanız bulunmaktadır,vs,vs,vsvs."; //[COLOR=#000000][FONT="Open Sans"]$servisMusteriAdi[/FONT][/COLOR] ile müşteri adını çekiyorum.
        }
        
    }
    $mail->MsgHTML($icerikMail);
    $mail->Send();
    Şimdiden teşekkürler.
  • 17-08-2021, 16:03:33
    #2
    $servisMusteriAdi değişkenini aşağıdaki yazdığım ile değiştirin:

    $row['servisMusteriAdi'] // Tablo adı neyse onu yazın servisMusteriAdi yerine.
  • 17-08-2021, 16:06:53
    #3
    Yusu adlı üyeden alıntı: mesajı görüntüle
    $servisMusteriAdi değişkenini aşağıdaki yazdığım ile değiştirin:

    $row['servisMusteriAdi'] // Tablo adı neyse onu yazın servisMusteriAdi yerine.
    Selamlar,
    Öncelikle teşekkürler fakat söylediğiniz düzenlemeyi daha öncede yapmıştım, gene aynı şekilde kayıtlı olan son isim üzerinden işlem gerçekleşti. İlginç şekilde döngü hep son kaydı dikkate alıyor
  • 17-08-2021, 16:06:56
    #4
    Bu şekilde zaten döngüden çıkan son veride kayıtlı mail adresine ve isme gönderir. foreach dönüyor ama her seferinde $icerikMail değişkenine yeni bir veri tanımlıyorsun sonuç olarak en son veriyi kullanıyor.

    Bu şekilde hitaplı göndermek için her müşteriye özel ayrı bir mail gönderecek şekide yapıyı komple foreach içinde döndürmen gerekiyor. o da belli bir sayının üzerine çıkınca time outa düşebilir. :/
  • 17-08-2021, 16:11:17
    #5
    Bu şekilde deneyin:

    include 'class.phpmailer.php';
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth = true;
    $mail->Host = 'mail.SiteAdresi.com';
    $mail->Port = 587;
    $mail->Username = 'noreply@SiteAdresi.com';
    $mail->Password = 'QwwwwZnww';
    $mail->SetFrom($mail->Username, 'Servis');
    $mail->From = "bilgi@SiteAdresi .com";
    $mail->CharSet = 'UTF-8';
    $mail->Subject = 'Gecikmiş Ödeme Bildirimi - evoNET Bilişim';
    $aboneler = $db2->prepare("SELECT * FROM systemCustomerServices WHERE servisDurum=9");
    $aboneler->execute();
    
    if ($aboneler->rowCount(PDO::FETCH_ASSOC)){
        foreach ($aboneler as $row) {
        extract($row);
    
            $mail->addBCC($row['servisMusteriMail'])
            $icerikMail = "Sayın $row['servisMusteriAdi'] ödenmemiş faturanız bulunmaktadır,vs,vs,vsvs.";
            $mail->MsgHTML($icerikMail);
            $mail->Send();
        }
    }
  • 17-08-2021, 16:12:41
    #6
    aSSembLy adlı üyeden alıntı: mesajı görüntüle
    Bu şekilde zaten döngüden çıkan son veride kayıtlı mail adresine ve isme gönderir. foreach dönüyor ama her seferinde $icerikMail değişkenine yeni bir veri tanımlıyorsun sonuç olarak en son veriyi kullanıyor.

    Bu şekilde hitaplı göndermek için her müşteriye özel ayrı bir mail gönderecek şekide yapıyı komple foreach içinde döndürmen gerekiyor. o da belli bir sayının üzerine çıkınca time outa düşebilir. :/
    muhtemelen timeout'a düşecektir hocam zaten 50-100ü gördü mü sistem timeouta düşer ini den timeout unlimted yapar çözersin ama sağlıklı değil

    PcKOnetwork adlı üyeden alıntı: mesajı görüntüle
    Selamlar,
    Öncelikle teşekkürler fakat söylediğiniz düzenlemeyi daha öncede yapmıştım, gene aynı şekilde kayıtlı olan son isim üzerinden işlem gerçekleşti. İlginç şekilde döngü hep son kaydı dikkate alıyor
    timeout'a düşmeyecek şekilde queue sistemi kurman lazım. bilmiyorsan ücretli kurulum yapabilirim. 1m kişiye gönderebilirsin
  • 18-08-2021, 01:05:36
    #7
    @Yusu o şekilde daha öncesinde denemiştim. Fakat o zamanda tüm listede ki alıcılara döngünün sayısı kadar mail gönderiyor.
    @Polat; ihtiyaçlar şuan için o kadar yüksek değil ama siz söyleyince araya girip küçük adetler halinde parça parça gönderim yapmasını sağladım.

    Sorunumu kullanıcıları ve e-mail adreslerini ayrı bir diziye alıp, gönderim esnasında diziden okuyarak hallettim arkadaşlar.

    Herkese teşekkürler.