Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] funkcja mail zwraca true podczas gdy maile nie dochodzą
Forum PHP.pl > Forum > Przedszkole
Gallareton
Problem polega na tym, że mam następujący kod
  1. <?
  2. $naglowki = "From: xxx@gmail.com".PHP_EOL."Reply-To: xxx@gmail.com".PHP_EOL."Content-type: text/plain; charset=iso-8859-2";
  3. //maile:
  4. $mail[] = 'gallareton@gmail.com';
  5. $mail[] = 'gallareton@mtv.pl';
  6.  
  7. for( $x = 0, $cnt = count($mail); $x < $cnt; $x++ ){
  8. $temp = $mail[$x];
  9. if(mail('$temp', 'test', 'test', $naglowki))
  10. {
  11. echo 'Mail do '."$temp".' zostal wyslany pomyslnie.<br>';
  12. }
  13. else
  14. {
  15. echo 'Nie udalo sie wyslac maila na adres '."$temp".'<br>';
  16. };
  17. };
  18. ?>

Jest on dostosowany do tego, żeby osoba nie mająca zielonego pojęcia o php mogła sobie powpisywać kolejne maile i wysłać masowo jakąś wiadomość. W każdym razie dopóki funkcja mail nie jest wykonywana wewnątrz pętli wszystko działa jak należy, mail się wysyła. Natomiast kiedy wsadzę kod do pętli to funkcja mail zwraca true, jednak na swojej skrzynce nic nie mam. Kombinowałem i kombinowałem, lecz wszystko działa tak długo jak funkcja mail nie jest w pętli.
thek
Lepiej zobacz co zwraca funkcja mail. Nie informację o wysłaniu, ale że zostało przekazane do wysłania. To coś innego. W taki sposób, w krótkim odstępie czasu, możesz zasypać serwer poczty wiadomościami wychodzącymi. A to może zostać uznane za spam i tym samym zablokowane. Mimo więc, że dostajesz z funkcji mail prawdę, to serwer blokuje tę wysyłkę.

Inna sprawa, że niepotrzebnie przedwcześnie optymalizujesz. Tu foreach na początek wystarczy wink.gif Jeszcze inna sprawa to '$temp' w funkcji mail. Odpuść sobie single quoty wokół zmiennej, a zobaczysz różnicę także...
Gallareton
Ale różnicę robi samo wsadzenie funkcji do pętli. Jak ją wyjmę i odświeżę stronę z tym kodem 10x pod rząd to mam na skrzynce 10 maili. Jak wsadzam ją do pętli zwraca true, jednak maili nie ma.

A odnośnie $temp to jest, że tak powiem wsadzone tam metodą prób i błędów.. a konkretnie dlatego, że funkcja mail nie działała jeśli jako argument dostawała $mail[$x], natomiast zaczęła działać kiedy dostawała $temp. Nie rozumiem dlaczego tak jest, ale dostosowałem rozwiązanie do zachowania skryptu, to samo próbuję zrobić z pętlą ale zamiana jej na pętlę while powoduje ten sam efekt: funkcja zwraca true a maili nie ma.
thek
Ale '$mail[$x]' nie ma prawa działać... bo wtedy jako adres email pod dokładnie to co napisałeś... Nie pobierze elementu o indeksie $x z tablicy mail, tylko tyle ile masz elementów, tyle razy wyśle mail pod adres '$mail[$x]' :/ Nie rozumiesz bowiem, że potraktuje to jako string. Naprawdę... przerób to na foreach, zamiast się z for czy while męczyć. Poza tym zyskasz na czytelności.
Gallareton
Właśnie zorientowałem się w czym problem i dziwię się, że nikt takiej głupoty nie zauważył.. przepraszam również za zaśmiecanie forum. $temp podawałem jako argument w apostrofach, przez co zamiast wartości zmiennej podawałem słowo $temp.. teraz już działa.
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.