Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z funkcja mail()
Forum PHP.pl > Forum > Przedszkole
morwo
Witam.
Zajmuje sie PHP juz jakis czas. Nie uwazam sie jednak za jakiegos wielkiego eksperta. Dzisiaj przekonalem sie o tym jeszcze raz. Pierwszy raz konfigurowalem serwer. Jest to pakiecik XAMPP obslugujacy Apache, MySQL 5.0, Filezilla i Mercury/32. Mialem pewne problemy, zeby skonfigurowac serwer pocztowy, ale teraz juz wszystko dziala. Uruchamiajac standardowa strone XAMPP-a na localhost mozna odpalic tamtejszy skrypcik do wysylania poczty. Wysyla i na lokalne konta i na zewnetrzne. Rowniez po odpaleniu tej stronki XAMPP-owej z zewnatrz po zewnetrznym IP wszystko dziala, a gdy juz chce odpalic moje skrypciki, to wyglada na to, ze funkcja mail() zwraca FALSE. Tylko, ze jesli wlasciwie kopiuje skrypt wysylajacy mail ze strony XAMPP-a do moich skryptow -- tez nie dzialaja. Jakiekolwiek skrypty stworzone w tym samym katalogu, co moje skrypty dzialaja -- skrypty ktore napisalem jakis kawalek czasu temu -- nie. Wczesniej wszystko bylo na darmowym serwerze yoyo.pl, tam dzialalo bez zarzutow. Nie wiem, co robic. Ktos z forumowiczow mial podobne problemy? Albo zaglebial sie bardziej w ta jakze prosta funkcje?

Moge jeszcze umiescic tutaj jeden z moich skryptow, ale dziala on na yoyo.pl, chyba, ze od zmeczenia cos przeoczylem:
  1. <?php
  2. //ustawia wartosci zmiennych, ktore zostana wykorzystane do wyslania emailu
  3. $do="moj_email@email.costam.pl";
  4. $temat="Temat e-mailu";
  5. //stworzenie stalej "PHP_EOL", ktora odpowiada za odpowiednie umieszczenie konca wiersza w zaleznosci od
     systemu (windows/unix);
  6. if (!defined('PHP_EOL')) define('PHP_EOL', strtoupper(substr(PHP_OS,0,3)=='WIN')?"rn":"n");
  7. $enter=PHP_EOL;
  8. //przypisanie zmiennej $ip adresu IP komputera, z ktorego poproszono o zmiane
  9. $ip=$_SERVER['REMOTE_ADDR'];
  10. $tresc="tresc<br/>tresc<br/>tresc<br/>podpis";
  11. //naglowki -- ustalenie kodowania
  12. $naglowki="MIME-Version: 1.0$enter";
  13. $naglowki.="Content-type: text/html; charset=utf-8$enter";
  14. //dodatkowe nagłówki
  15. $naglowki="From: Automat systemu <automat@email.costam.pl>";
  16. //przypisanie wartosci zmiennej $wyslij_mail, ktora jest udanym badz nie wyslaniem
     e-maila
  17. $wyslij_mail=mail($do, $temat, $tresc, $naglowki);
  18. if ($wyslij_mail) {
  19. //jesli sie uda wyslac e-mail wykonuje ponizszy kod
  20.  //przypisanie wartosci zmiennej $zmiana, ktora jest udanym badz nie zmienieniem ha
    sla dla uzytkownika w bazie danych
  21.  $zmiana=zmien_haslo($user_id, $nowehaslo);
  22.  if ($zmiana===true) {
  23. //jesl uda sie zmienic haslo w bazie danych, wyswietla komunikat
  24. wyswietl_komunikat('Nowe hasło zostało pomyślnie zmienione.');
  25.  }
  26.  else {
  27.  //jesli sie nie uda zmienic haslo w bazie danych wyswietla komunikat o bledzie
  28. wyswietl_blad("Błąd: Nie można zmienić hasła.<br/><br/>$zmiana<br/><br/>Proszę wrócić i spróbować ponownie.");
  29.  }
  30. }
  31. ?>
Krzasz
Pojawia się jakiś błąd?
Spróbuj wysłać na razie bez nagłówków
morwo
wlasnie zero bledow, a nie uzywalem operatora "@"... mozliwe tez, ze blad sie pojawil, ale odpowiednie bloki go zaslonily, ale edytowalem zrodlo strony i tez nic... zaraz sprawdze bez headerow.

@edit:
po usunieciu headera (zahashowalem zmienna $naglowki i usunalem ja z funkcji mail()) to samo... wyskakuje blad "Nie mozna zmienic hasla...")
Krzasz
jeśli wyskakuje taki błąd to masz źle coś z funkcją zmien_haslo, bo maila wysyła, tylko juz w tym ifie się coś złego dzieje

zoabcz na kod
  1. <?php
  2. $zmiana=zmien_haslo($user_id, $nowehaslo);
  3.  if ($zmiana===true) {
  4. //jesl uda sie zmienic haslo w bazie danych, wyswietla komunikat
  5. wyswietl_komunikat('Nowe hasło zostało pomyślnie zmienione.');
  6.  }
  7.  else {
  8.  //jesli sie nie uda zmienic haslo w bazie danych wyswietla komunikat o bledzie
  9. wyswietl_blad("Błąd: Nie można zmienić hasła.<br/><br/>$zmiana<br/><br/>Proszę wrócić i spróbować ponownie.");
  10.  }
  11. ?>


jeśli ten kod wykonuje (wyświetla błąd o zmianie hasła) to email został wysłany według twojego kodu.
morwo
Nie wykonuje sie, tzn. w bazie nie zostaje zmienione haslo. Nie wiem, chyba napisze to od podstaw, w koncu az takie duze nie jest tongue.gif Chociaz przychodza mi na mysl juz naprawde dziwne pytania np.: czy moze miec to zwiazek z kodowaniem znakow? czy moze byc to wina tego, ze skrypt, ktory tutaj przedstawilem jest includowany do innego, jakby glownego skryptu? Chociaz dziwne te pytania i w zasadzie totalnie nie majace zwiazku... ale po prostu sam juz nie wiem, co o tym myslec. Wydawalo sie, ze wystarczy skonfigurowac serwer i przekopiowac pliki. Tymbardziej, ze na yoyo.pl wszystko dzialalo i nic nie zmienialem w kodzie.
Krzasz
zrób tak: niech funkcja zmien_haslo zwróci tylko true i nic innego nie robi wtedy zobaczysz ze maile są wysyłane, coś z funkcją zmien_haslo jest nie tak.
morwo
Zaczalem sprawdzac kod zmudna metoda hashowania co chwile paru linijek kodu i sprawdzania, czy dziala tongue.gif Wiem, gdzie jest blad. Chodzi o $naglowki. Teraz staram sie dojsc do tego, dlaczego tam jest blad. Jesli zmienie w funkcji mail() i zamiast czwartego argumentu wrzuce np. $header, ktoremu wczesniej przypisze wartosc np."From: mail@email.com", to caly skrypt zadziala prawidlowo :|

Wiec albo to cos z kodowaniem (magia to by byla) -- chociaz uwazam to za malo prawdopodobne, albo ze znakiem zakonczenia linii w headerze. OS, na ktorym stoi serwer to Win Server 2003, z tego co pamietam tongue.gif Moze on uzywa innego zakonczenia linii niz inne windy? winksmiley.jpg A moze po prostu czesc skryptu, ktora jest odpowiedzialna za wybranie odpowiedniego znaku konca wiersza popelnia blad, bo winda serv zwraca jakas inna wartosc zmiennej niz string zaczynajacy sie na:"WIN...".

What'ya think? tongue.gif

@edit:
Juz zaczynalem za bardzo kombinowac. W linii 15 kodu jest blad skladniowy, ktory jest banalny i zamiast dopisac stringa do poprzednich przypisuje go jako nowa wartosc zmiennej $naglowki. Ale to nie jest blad, ktory powodowal, ze skrypt sie nie wykonywal. Bledem rownie banalnym i glupio mi za niego byla rowniez ta linia kodu (15 w moim pierwszym poscie), gdzie po "From:" wstawialem tekst zamiast adresu e-mail. Przynajmniej, jak tekst usunalem i zostawilem e-mail skrypt wykonuje sie tak, jak powinien.

Dziekuje bardzo a pomoc Krzasz smile.gif A dla pozostalych mam jeszcze takie male pytanko, bo ciekawski jestem: dlaczego ten kod nie dzialal w taki sposob, jaki zapisalem w pierwszym poscie tutaj, na moim prywatnym serwerze, a na yoyo.pl dzialal/dziala? Czy zalezy to od softu, jakiego uzywam do obslugi SMTP?
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.