Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Pętla w phpmailer
ufo1990
post
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


Mam problem z PHPMailer ponieważ chcę wysłać wiadomości do wszystkich użytkowników z bazy danych i to działa jednak pętla nie działa do "$mail->Subject" oraz "$mail->Body". Ktoś coś doradzi, pomoże ?

  1. require_once "connect.php";
  2. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
  3. $result = $connect->query("Select Group_concat(name SEPARATOR ',') as names, Group_concat(email SEPARATOR ',') as emails from persons");
  4. if($result->num_rows > 0)
  5. {
  6. while($row = $result->fetch_assoc())
  7. {
  8. $name_explode = explode(",",$row['names']);
  9. $email_explode = explode(",",$row['emails']);
  10.  
  11. require "PHPMailer/PHPMailerAutoload.php";
  12.  
  13. $mail = new PHPMailer();
  14. $mail->CharSet = "UTF-8";
  15. $mail->IsSMTP();
  16. $mail->SMTPAuth = true;
  17.  
  18. $mail->SMTPSecure = 'ssl';
  19. $mail->Host = '**********';
  20. $mail->Port = 465;
  21. $mail->Username = '**********';
  22. $mail->Password = '**********';
  23.  
  24. $mail->IsHTML(true);
  25. $mail->From='**********';
  26. $mail->FromName='**********';
  27.  
  28. $mail->AddReplyTo('**********');
  29.  
  30. for ($i=0; $i< count($name_explode); $i++)
  31. {
  32. $mail->Subject = $name_explode[$i];
  33. $mail->Body = "Witaj$name_explode[$i]";
  34. $mail->AddAddress($email_explode[$i], $name_explode[$i]);
  35. }
  36. if(!$mail->Send())
  37. {
  38. echo "Wiadomość nie wysłana: " . $mail->ErrorInfo;
  39. }
  40. else
  41. {
  42. echo "Wiadomość wysłana!";
  43. }
  44. $mail->clearAllRecipients();
  45. }
  46. }
  47. $connect->close();
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Spróbuj SwiftMailer: https://swiftmailer.symfony.com/docs/plugin...ecorator-plugin
Go to the top of the page
+Quote Post
Tomplus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 884
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Po pierwsze.
Wystaw obiekt PHPMailer poza pętle. Może nie wysyłasz emaili bo masz za dużo połączeń z pocztą w tym samym czasie.

Go to the top of the page
+Quote Post
ufo1990
post
Post #4





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


Cytat(Tomplus @ 18.05.2021, 23:28:05 ) *
Po pierwsze.
Wystaw obiekt PHPMailer poza pętle. Może nie wysyłasz emaili bo masz za dużo połączeń z pocztą w tym samym czasie.


Maile normalnie się wysyłają i pętla dla adresów działa, jednak każdy e-mail zawiera tą samą informacje.
Go to the top of the page
+Quote Post
gino
post
Post #5





Grupa: Zarejestrowani
Postów: 324
Pomógł: 52
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Wywal też poza pętlę
Kod
require "PHPMailer/PHPMailerAutoload.php";


Jedno zaciągnięcie biblioteki wystarczy.

edit: wyświetl sobie w phpmyadmin co tak naprawdę zwraca Ci zapytanie sql.

Ten post edytował gino 19.05.2021, 06:26:44
Go to the top of the page
+Quote Post
ufo1990
post
Post #6





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


Cytat(gino @ 19.05.2021, 07:17:50 ) *
Wywal też poza pętlę
Kod
require "PHPMailer/PHPMailerAutoload.php";


Jedno zaciągnięcie biblioteki wystarczy.

edit: wyświetl sobie w phpmyadmin co tak naprawdę zwraca Ci zapytanie sql.

wywaliłem po za pętle PHPMailer. Zapytanie SQL zwraca w moim przypadku dwa rekordy z adresem e-mail oraz imieniem i nazwiskiem. Tak jak pisałem powyżej pętla nie działa na dla "$mail->Subject" oraz "$mail->Body"natomiast dorzucając imię i nazwisko do "AddAddress" pętla działa i wysyła również imię i nazwisko.
  1. $mail->AddAddress($email_explode[$i], $name_explode[$i]);


Ten post edytował ufo1990 19.05.2021, 06:50:43
Go to the top of the page
+Quote Post
LowiczakPL
post
Post #7





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


tak poza pętlą powinien być mailer

  1. require_once "connect.php";
  2. require "PHPMailer/PHPMailerAutoload.php";
  3.  
  4. $mail = new PHPMailer();
  5. $mail->CharSet = "UTF-8";
  6. $mail->IsSMTP();
  7. $mail->SMTPAuth = true;
  8. $mail->SMTPSecure = 'ssl';
  9. $mail->IsHTML(true);
  10. $mail->Host = '**********';
  11. $mail->Port = 465;
  12. $mail->Username = '**********';
  13. $mail->Password = '**********';
  14.  
  15. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
  16. $result = $connect->query("Select Group_concat(name SEPARATOR ',') as names, Group_concat(email SEPARATOR ',') as emails from persons");
  17. if($result->num_rows > 0)
  18. {
  19. while($row = $result->fetch_assoc())
  20. {
  21. $name_explode = explode(",",$row['names']);
  22. $email_explode = explode(",",$row['emails']);
  23.  
  24.  
  25. $mail->From='**********';
  26. $mail->FromName='**********';
  27. $mail->AddReplyTo('**********');
  28.  
  29. for ($i=0; $i< count($name_explode); $i++)
  30. {
  31. $mail->Subject = $name_explode[$i];
  32. $mail->Body = "Witaj $name_explode[$i]";
  33. $mail->AddAddress($email_explode[$i], $name_explode[$i]);
  34. }
  35. if(!$mail->Send())
  36. {
  37. echo "Wiadomość nie wysłana: " . $mail->ErrorInfo;
  38. }
  39. else
  40. {
  41. echo "Wiadomość wysłana!";
  42. }
  43. $mail->clearAllRecipients();
  44. }
  45. }
  46. $connect->close();


Ten post edytował LowiczakPL 19.05.2021, 07:13:46
Go to the top of the page
+Quote Post
ufo1990
post
Post #8





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


Cytat(LowiczakPL @ 19.05.2021, 08:13:27 ) *
tak poza pętlą powinien być mailer

  1. require_once "connect.php";
  2. require "PHPMailer/PHPMailerAutoload.php";
  3.  
  4. $mail = new PHPMailer();
  5. $mail->CharSet = "UTF-8";
  6. $mail->IsSMTP();
  7. $mail->SMTPAuth = true;
  8. $mail->SMTPSecure = 'ssl';
  9. $mail->IsHTML(true);
  10. $mail->Host = '**********';
  11. $mail->Port = 465;
  12. $mail->Username = '**********';
  13. $mail->Password = '**********';
  14.  
  15. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
  16. $result = $connect->query("Select Group_concat(name SEPARATOR ',') as names, Group_concat(email SEPARATOR ',') as emails from persons");
  17. if($result->num_rows > 0)
  18. {
  19. while($row = $result->fetch_assoc())
  20. {
  21. $name_explode = explode(",",$row['names']);
  22. $email_explode = explode(",",$row['emails']);
  23.  
  24.  
  25. $mail->From='**********';
  26. $mail->FromName='**********';
  27. $mail->AddReplyTo('**********');
  28.  
  29. for ($i=0; $i< count($name_explode); $i++)
  30. {
  31. $mail->Subject = $name_explode[$i];
  32. $mail->Body = "Witaj $name_explode[$i]";
  33. $mail->AddAddress($email_explode[$i], $name_explode[$i]);
  34. }
  35. if(!$mail->Send())
  36. {
  37. echo "Wiadomość nie wysłana: " . $mail->ErrorInfo;
  38. }
  39. else
  40. {
  41. echo "Wiadomość wysłana!";
  42. }
  43. $mail->clearAllRecipients();
  44. }
  45. }
  46. $connect->close();

Tak wiem, ustawiłem PHPMailer po za pętla ale nie oto chodzi że PHPMailer nie działa tylko nie działa pętla dla
  1. $mail->Subject = $name_explode[$i];
  2. $mail->Body = "Witaj $name_explode[$i]";


Ten post edytował ufo1990 19.05.2021, 07:23:36
Go to the top of the page
+Quote Post
gino
post
Post #9





Grupa: Zarejestrowani
Postów: 324
Pomógł: 52
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Zapytanie powinno zwrócić jeden rekord z dwoma polami a nie 2 rekordy, po co więc pętla while? Całość wysyłania powinna się odbyć w pętli for, a w zasadzie to w pętli foreach bo te zmienne $name_explode i $email_explode to tablice.
Go to the top of the page
+Quote Post
ufo1990
post
Post #10





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


Cytat(gino @ 19.05.2021, 08:56:37 ) *
Zapytanie powinno zwrócić jeden rekord z dwoma polami a nie 2 rekordy, po co więc pętla while? Całość wysyłania powinna się odbyć w pętli for, a w zasadzie to w pętli foreach bo te zmienne $name_explode i $email_explode to tablice.

Zgadza się mój błąd przecież
  1. SELECT Group_concat(name SEPARATOR ',') AS names, Group_concat(email SEPARATOR ',') AS emails FROM persons
zwróci jednej rekord z dwoma polami po przecinku. Próbowałem z foreach ale nadal nie w treści e-maila jest wysyłana tylko treść z pierwszego pola.
Go to the top of the page
+Quote Post
gino
post
Post #11





Grupa: Zarejestrowani
Postów: 324
Pomógł: 52
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Wywal pętle while, w pętlę for wrzuć
Kod
   if(!$mail->Send())
        {
            echo "Wiadomość nie wysłana: " . $mail->ErrorInfo;
        }
    else
        {
            echo "Wiadomość wysłana!";
        }
            $mail->clearAllRecipients();


edit tylko wcześniej zrób mysql_fetch_array na tym jednym rekordzie.

Ten post edytował gino 19.05.2021, 08:20:12
Go to the top of the page
+Quote Post
ufo1990
post
Post #12





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


Cytat(gino @ 19.05.2021, 09:18:27 ) *
Wywal pętle while, w pętlę for wrzuć
Kod
   if(!$mail->Send())
        {
            echo "Wiadomość nie wysłana: " . $mail->ErrorInfo;
        }
    else
        {
            echo "Wiadomość wysłana!";
        }
            $mail->clearAllRecipients();


edit tylko wcześniej zrób mysql_fetch_array na tym jednym rekordzie.


Dziękuje za pomoc, faktycznie działa (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
gino
post
Post #13





Grupa: Zarejestrowani
Postów: 324
Pomógł: 52
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Wywal też te echa, zrób jak należy, wrzuć wysyłanie w try...catch, po co za każdym razem ma wypisywać że wysłany, jak będizesz miał 100 klientów to 100xecho ?
Zobacz jak to robi autor:
phpmailer
Go to the top of the page
+Quote Post
ufo1990
post
Post #14





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 26.07.2019

Ostrzeżenie: (0%)
-----


Cytat(gino @ 19.05.2021, 10:21:34 ) *
Wywal też te echa, zrób jak należy, wrzuć wysyłanie w try...catch, po co za każdym razem ma wypisywać że wysłany, jak będizesz miał 100 klientów to 100xecho ?
Zobacz jak to robi autor:
phpmailer


jasne kod został uporządkowany i żadnych echo nie ma. Tak naprawę to kod będzie wykorzystywany do crona.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 19:49