Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]PHP Mailer nie wysyła e-maili
Forum PHP.pl > Forum > Przedszkole
amii
Funkcja ma wysyłać 100 e-maili pobranych z bazy danych. Korzystam z klasy phpmailer, niby wszystko OK wyświetlają się komunikaty mail sent ale funkcja nie wysyła e-maili. Poniżej zamieszczam całość kodu odpowiedzialnego za wysyłkę e-maili. Funkcja pobiera dane z plików i bazy danych. Dane do phpmailer są poprawne bo funkcja nie wywala się przy raportowaniu błędów po za tym dane te były skopiowane z innej działającej funkcji na tym samym serwerze.
Zapytanie do bazy OK funkcja zwraca prawidłowe wartości.

  1. function wyslij($plik3='statystyki.txt', $ilosc=100) {
  2. //$suma liczba ogólna wszystkich emaili w bazie to powinien byc numer ostatniego id
  3. //$ plik to plik ze statystykami gdzie jest zapisywane ile maili zostalo do tej pory wyslanych utworz wlasny plik i nada mu uprwnienia do zapisu chmod 777 zaleca sie utowrzenie pliku o nazwie statystyki.txt
  4. define('SQL_HOST', 'localhost'); //numer hosta na 99% localhost
  5. define('SQL_USER', 'user_bazy'); //nazwa uzytkownika bazy danych
  6. define('SQL_PASS', 'haslo_bazy'); //haslo bazy danych
  7. define('SQL_DB', 'baza'); //nazwa bazy danych
  8. $a = 0; //zmienna liczaca ilosc wyslanych e-maili
  9.  
  10.  
  11. $conn = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS) or die (mysql_error());
  12. mysql_select_db(SQL_DB, $conn) or die ('Wystapil blad podczas laczenia sie z serwerem bazy danych w funkcji wyslij: ' . mysql_error());
  13.  
  14.  
  15. if (isset($_POST['suma']) && $_POST['suma']!="") {$suma=$_POST['suma'];}
  16. else {
  17. $sql4 = "SELECT id FROM tabelka";
  18. $zapytaj1 = mysql_query($sql4);
  19. $suma = mysql_num_rows($zapytaj1);
  20. echo 'Zapytania ' . $suma . '<br>';
  21. }
  22. if ($ilosc > $suma && $suma <= 100) {$ilosc = $suma;} //jesli ilosc jaka chcemy wyslac za jednym razem jest wieksza od ilsoci maili w bazie to wysylamy wszystkie maile w bazie
  23.  
  24.  
  25. if (isset($_POST['adresy']) && $_POST['adresy']!="") {$ilosc=$_POST['adresy'];} //ustawiamy domyslnie ze wysylamy 100 adresow
  26.  
  27.  
  28. $ile = otworz($plik3='statystyki.txt', $ilosc); //wywolanie funkcji otwierajacej plik ze statystykami jako argument przekazujemy nazwe pliku, funkcja zwraca ilosc wyslanych emaili
  29. $wartosc = $ile - $ilosc; //wysylamy umowne 100 maili
  30. // echo 'Ile wynosi ' .$ile. '<br><br>';
  31.  
  32. if ($ile > $suma) {
  33. skasuj ($plik3); //jesli ilosc wyslanych maili jest wieksza od calkowitej ich sumy to zerujemy plik ze statystykami
  34. }
  35.  
  36.  
  37.  
  38. if ($wartosc <= 0) {
  39. $wartosc = 1;
  40. }
  41. if ($ile < 100) {
  42. $ile = $suma; //jesli w bazie jest mniej niz 100 emaili to przypisujemy maksymalna wartosc okreslona na poczatku
  43. }
  44.  
  45. $sql = "SELECT emaile FROM tabelka WHERE id BETWEEN '$wartosc' AND '$ile'";
  46. $zapytaj = mysql_query($sql) or die ('Nie moge sie polaczyc z baza w funkcji wyslij' . mysql_error());
  47.  
  48.  
  49. $mail = new PHPMailer(true);
  50.  
  51.  
  52. $mail->IsSMTP(); // set mailer to use SMTP
  53. $mail->Host = ""; // specify main and backup server
  54. $mail->SMTPAuth = true; // turn on SMTP authentication
  55. //$mail->SMTPDebug = true;
  56. $mail->Host = ""; // specify main and backup server
  57. $mail->Port = 25;
  58. $mail->Username = ""; // SMTP username
  59. $mail->Password = "haslo"; // SMTP password
  60. $mail->From = "Od kogo wiadomosc";
  61. $mail->FromName = "Administrator";
  62. $mail->AddReplyTo("adres@do_odpowiedzi.pl", "Tytul");
  63.  
  64.  
  65. //$mail->AddAttachment("tmp/test.php"); // add attachments
  66. //$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // optional name
  67. $mail->IsHTML(true); // set email format to HTML
  68.  
  69. $mail->Subject = "Tytul wiadomosci";
  70. $mail->Body = "tresc wysylanej wiadomosci";
  71.  
  72. $mail->AltBody = "To jest widomość wysłana w formacie HTML";
  73.  
  74.  
  75.  
  76. while ($row = mysql_fetch_array($zapytaj)) {
  77.  
  78. $mail->AddAddress($row['emaile'], '');
  79.  
  80. echo 'Mail '. $row['emaile'] . '<br>';
  81.  
  82.  
  83. if(!$mail->Send())
  84. {
  85. echo "Wiadomosc nie zostala wyslana. <p>";
  86. echo "Mailer Error: " . $mail->ErrorInfo;
  87. }
  88. $mail->ClearAddresses();
  89. $mail->ClearAttachments();
  90. echo "mail sent <br>";
  91.  
  92.  
  93. }
  94.  
  95. $i = odczyt($plik='statystyki.txt');
  96.  
  97. if ($i > $suma) { //jesli licznik jest wiekszy od ilosci emaili w bazie to przyrownujemy go do ilosci maili w bazie
  98. $i = $suma;
  99. }
jajcarzd1
Wstaw na sztywno jednego maila i sprawdź czy wysyła. Po drugie czy jesteś pewny że łączy się poprawnie z serwerem smtp ? Spróbuj może na innym porcie niż 25 np. 587

Poza tym jak rozumiem

  1. $mail->Host = "";
  2. $mail->Username = "";
  3.  


masz uzupełnione ? I dlaczego masz 2 razy

  1. $mail->Host = "";
amii
Tak pola z host i username mam uzupełnione. Host jeden usunąłem. Po wpisaniu innego portu wywalił takie coś:

Warning: fsockopen() [function.fsockopen]: unable to connect to webmail.alkomaty.biz:587 (Connection refused) in /var/www/vhosts/alkomaty.biz/httpdocs/sitemap/class.smtp.php on line 122
Wiadomosc nie zostala wyslana.

Wklepałem też pojedynczy e-mail na sztywno cały czas niestety to samo :/
thek
W takim razie sam widzisz, że błąd jest podczas ustanawiania połączenia. Pewnie gdzieś sa nieprawidłowe dane lub serwer ma blokadę dla socketów.
zordon
no ale rozumiem ze wczesniej na porcie 25 nie wywalało takiego błędu?

daj sobie najpierw wysylanie jednego maila z wpisanymi danymi adresowymi "na sztywno" a komunikat o wyslaniu maila daj sobie w klamre else po wykrywaniu błędu. sprawdz czy na pewno masz włączone wyswietlanie wszystkich błędów na serwerze.

amii
OK już działa, skopiowałem wszystkie ustawienia a później modyfikowałem, naprawdę nie wiem czym to dokładnie było spowodowane być może była zła kolejność niektórych linijek.
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.