Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wysyłanie kilku emaili
Forum PHP.pl > Forum > Przedszkole
-Maciek1705-
Witam wszystkich serdecznie otóż mam takie pytanie z problemem, niedawno przyszło mi zrobić dość ciekawy skrypt musi on wysyłać 2 różne wiadomości do 2 różnych adresatów na raz. Dotychczas korzystałem z klasy phpmailer do wysyłania kilku tych samych sztuk lub pojedynczych wiadomości. Próbowałem więc napisać ten skrypt z pomocą phpmailer i powstało coś takiego:
  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3.  
  4. $name = $_POST['name'];
  5. $email = $_POST['email'];
  6. $weight = $_POST['weight'];
  7. $unit = $_POST['unit'];
  8. $sex = $_POST['sex'];
  9. $height = $_POST['height'];
  10. $old = $_POST['old'];
  11. $dream_weight = $_POST['dream_weight'];
  12.  
  13. //first email
  14. require("PHPMailer/class.phpmailer.php"); //zalaczenie klasy php
  15. $mail = new PHPMailer();
  16. $mail->IsMail(); //
  17. //$mail_s->IsSMTP(); //deklaracja klasie uzycia serwera SMTP
  18. //$mail_s->Host = "poczta.pl"; //serwer SMTP
  19. //$mail_s->SMTPAuth = true; //wlaczona autoryzacja SMTP
  20. //$mail_s->Username = ''; //SMTP login
  21. //$mail_s->Password = ''; //SMTP haslo
  22. $mail->AddReplyTo($email, $name);
  23. $mail->AddAddress("example@vp.pl"); //adres odbiorców 1 odbiorcy
  24. $mail->SetFrom($email, $name);
  25. $mail->Subject = "Profil dietetyczny - potwierdzenie wysłania wiadomości"; //tytul wiadomosci
  26. $mail->Body = "Dziękujemy za wysłanie wiadomości. Wkrótce się z Państwem skontaktujemy"; //tresc wiadomosci
  27. $mail->WordWrap = 50;
  28. $mail->CharSet = "utf-8"; //strona kodowa
  29.  
  30. if(!$mail->Send())
  31. {
  32. echo 'Message was not sent.';
  33. echo 'Mailer error: ' . $mail->ErrorInfo;
  34. }
  35. else
  36. {
  37. echo 'Wiadomość została wysłana.';
  38. }
  39.  
  40.  
  41. $body = "waga: ".$weight.$unit." preferowana waga: ".$dream_weight;
  42. $body .= "płeć: ".$sex;
  43. $body .= "wzrost: ".$height;
  44. $body .= "wiek: ".$old;
  45.  
  46. //second email
  47. require("PHPMailer/class.phpmailer.php"); //zalaczenie klasy php
  48. $mail2 = new PHPMailer();
  49. $mail2->IsMail(); //
  50. //$mail_s->IsSMTP(); //deklaracja klasie uzycia serwera SMTP
  51. //$mail_s->Host = "poczta.pl"; //serwer SMTP
  52. //$mail_s->SMTPAuth = true; //wlaczona autoryzacja SMTP
  53. //$mail_s->Username = ''; //SMTP login
  54. //$mail_s->Password = ''; //SMTP haslo
  55. $mail2->AddReplyTo($email, $name);
  56. $mail2->AddAddress("example@vp.pl"); //adres 2 odbiorcy
  57. $mail2->SetFrom($email, $name);
  58. $mail2->Subject = "Profil dietetyczny - wiadomość ze strony"; //tytul wiadomosci
  59. $mail2->MsgHTML($body); //tresc wiadomosci
  60. $mail2->WordWrap = 50;
  61. $mail2->CharSet = "utf-8"; //strona kodowa
  62.  
  63. if(!$mail2->Send())
  64. {
  65. echo 'Message was not sent.';
  66. echo 'Mailer error: ' . $mail2->ErrorInfo;
  67. }
  68. else
  69. {
  70. echo 'Wiadomość 2 została wysłana.';
  71. }
  72. ?>


pierszwa wiadomość wysyła się bez problemu natomiast kolejna już nie. Będę wdzięczny za sugestie i pomoc w tej sprawie.
erix
Podejrzewam, że chodzi o zabezpieczenie antyspamowe. Musisz odczekać kilka sekund (czas zależny od administratora) albo wysyłać kolejnego adresata przez pole BCC.
nospor
A jak dla mnie to dostaje FATAL ERROR spowodu podwójnego require klasy phpmailer smile.gif

@Maciek po co tworzysz kolejne obiekty phpmailer? Obiekt tworzysz raz, tylko zmieniasz adresatów i tresc
-Maciek1705-
aha ok wobec tego spróbuje tak jak radzi nospor i zobaczę czy coś się ruszy, no chyba że faktycznie jest zabezpieczenie antyspamowe. Dzięki za radę i pozdrawiam
bluzmen
Ja się podłącze z moim kodem i moim problemem do tego postu. Chodzi o to, że wysyłam np. do 3 adresatów pobranych z bazy tą pętlą i do każdego z nich dochodzą 3 maile (takie same). Tylko w polu adresów u odbiorcy pojawiają się w pierwszym mailu 3 adresy (z bazy), drugim 2 adresy i w trzecim 1 adres. Czyli razem wysyła 9 listów do wszystkich adresatów. Co robię źle?

  1. require_once('class.phpmailer.php');
  2.  
  3. $polaczenie = mysql_connect("localhost", "login", "haslo") or die ("Nie masz uprawnien");
  4. mysql_select_db("moja_baza") or die ("Nie masz uprawnien");
  5. mysql_query ("SET NAMES 'utf8'");
  6.  
  7. $mail = new PHPMailer();
  8.  
  9. $mail->Priority = "3";
  10. $mail->CharSet = "utf-8";
  11. $mail->ContentType = "text/plain";
  12. $mail->Encoding = "8bit";
  13. $mail->From = "moja@poczta.pl";
  14. $mail->FromName = "bluzmen";
  15. $mail->Subject = $_POST['Temat'];
  16. $mail->Body = $_POST['Tresc'];
  17. $mail->Mailer = "smtp";
  18. $mail->Host = "poczta.smtp.pl:587";
  19. $mail->Port = 587;
  20. $mail->Username = "moja@poczta.pl";
  21. $mail->Password = "*******";
  22. $mail->SMTPKeepAlive = true;
  23. $mail->SMTPAuth = true;
  24. $mail->SetLanguage("pl", "language/");
  25.  
  26. $adresat = mysql_query("SELECT adresy FROM mailer") or die(mysql_error());
  27.  
  28. while ($rekord = mysql_fetch_array($adresat)) {
  29. $mail->AddAddress($rekord);
  30.  
  31. if($mail->Send()) {
  32. echo "E-mail do ".$rekord['adresy']." został wysłany<br/>";
  33. } else {
  34. echo "E-mail do ".$rekord['adresy']." nie mógł zostać wysłany, przyczyna :".$mail->ErrorInfo."<br/>";
  35. $mail->ClearAddresses();
  36. }
  37. }
  38. $mail->SmtpClose();

nospor
$mail->AddAddress($rekord);
Przecież $rekord to tablica a nie adres. Jakim cudem ci to w ogole dziala.
bluzmen
No właśnie, $rekord to jest tablica, działa bo wkleja do AddAddress ciąg adresów i wysyła. Jak z tej tablicy wyjąć pojedynczo adresy?
nospor
zrob
print_r($rekord);
i pokaż nam/sobie co tam siedzi.
bluzmen
Array ( [adresy] => nigger2@o2.pl ) Array ( [adresy] => nigger3@o2.pl ) Array ( [adresy] => nigger4@o2.pl) itd.
nospor
No, i nie uważasz że powinno być tak:
$mail->AddAddress($rekord['adresy']);
?
bluzmen
Cytat(nospor @ 10.03.2011, 14:46:26 ) *
No, i nie uważasz że powinno być tak:
$mail->AddAddress($rekord['adresy']);
?

poprawka

Wysyła ale dalej po 3 maile i w każdym jak ww 3,2 i 1 adres odbiorcy. To ciekawe jak będzie kiedy w bazie będzie 100 adresów:P
nospor
ej.....
$mail->ClearAddresses();
o to ma być poza IFem a nie w środku....
bluzmen
Cytat(nospor @ 10.03.2011, 15:08:20 ) *
ej.....
$mail->ClearAddresses();
o to ma być poza IFem a nie w środku....


Wiem, już zauważyłem i poprawiłem wcześniej ale to nic nie zmienia też.
nospor
Pokaz jak to poprawiles bo pewnie źle to zrobiles.
Pamietaj że ma to być w pętli a nie poza nią. Ma to być poza ifem

......


Ma to byc tak:

//.....
$mail->ClearAddresses();
$mail->AddAddress($rekord['adresy']);
//.....

bluzmen
Wkleję kod od tego momentu już

  1. ........
  2. $adresat = mysql_query("SELECT adresy FROM mailer") or die(mysql_error());
  3.  
  4. while ($rekord = mysql_fetch_assoc($adresat)) {
  5.  
  6. if($mail->Send()) {
  7. echo "E-mail do ".$rekord['adresy']." został wysłany<br/>";
  8. } else {
  9. echo "E-mail do ".$rekord['adresy']." nie mógł zostać wysłany, przyczyna :".$mail->ErrorInfo."<br/>";
  10. }
  11. $mail->ClearAddresses();
  12. $mail->AddAddress($rekord['adresy']);
  13. }
  14. $mail->SmtpClose();


Tak właściwie dobrze wysyła tylko wypluwa błąd "Należy podać prawidłowy adres email Odbiorcy" przy wysyłaniu do pierwszego adresu ale dochodzi mimo to.
nospor
Włącz myślenie....
teraz najpierw wysylasz a dopiero potem dodajesz adresata.
bluzmen
Tak już zauważyłem wcześniej:) to było moje zaniedbanie tym razem, zła kolejność. Przepraszam i dziękuję mimo wszystko za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.