Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z funkcją MAIL
Forum PHP.pl > Forum > Przedszkole
Musashi
Witam.
Przerabiam książkę "Dynamiczne strony WWW php i MySQL" z Heliona i utknąłem pod koniec 3-ciego rozdziału.
Mam skrypt:
  1. <?php # Skrypt 3.15 - rejestracja.php
  2.  
  3. if (isset($_POST['submit'])) { // Obsluż formularz.
  4.  
  5. $message = NULL; // Utworz nową, pustą zmienną.
  6.  
  7. // Sprawdź nazwisko.
  8. if (strlen($_POST['name']) > 0) {
  9. $name = TRUE;
  10. } else {
  11. $name = FALSE;
  12. $message .= '<p>Zapomniałeś podać swoje nazwisko!</p>';
  13. }
  14.  
  15. // Sprawdź adres e-mail.
  16. if (strlen($_POST['email']) > 0) {
  17. $email = TRUE;
  18. } else {
  19. $email = FALSE;
  20. $message .= '<p>Zapomniałeś podać swój adres e-mail!</p>';
  21. }
  22.  
  23. // Sprawdź nazwę użytkownika.
  24. if (strlen($_POST['username']) > 0) {
  25. $username = TRUE;
  26. } else {
  27. $username = FALSE;
  28. $message .= '<p>Zapomniałeś wprowadzić nazwę użytkownika!</p>';
  29. }
  30.  
  31. // Sprawdź czy użytkownik wprowadził hasło i czy w obu polach jest ono takie samo.
  32. if (strlen($_POST['password1']) > 0) {
  33. if ($_POST['password1'] == $_POST['password2']) {
  34. $password = TRUE;
  35. } else {
  36. $password = FALSE;
  37. $message .= '<p>Za drugim razem wpisałeś inne hasło!</p>';
  38. }
  39. } else {
  40. $password = FALSE;
  41. $message .= '<p>Zapomniałeś wprowadzić hasło!</p>';
  42. }
  43.  
  44. if ($name && $email && $username && $password) { // Jezeli wszystko jest OK.
  45. // Zarejestruj uzytkownika.
  46.  
  47. // Wyslij maila.
  48. $body = "Dziękujemy za zarejestrowanie się na naszej stronie!nTwoja nazwa użytkownik
    a to '{$_POST['username']}' a Twoje hasło to '{$_POST['password1']}'.nnZ poważaniem,nMy"
    ;
  49. mail ($_POST['email'], 'Dziekujemy za zarejestrowanie sie!', $body, 'From: admin@localhost');
  50. header ('Location: dziekujemy.php');
  51. exit();
  52. } else {
  53. $message .= '<p>Wróć do formularza i spróbuj jeszcze raz.</p>';
  54. }
  55.  
  56. }
  57.  
  58. // Ustaw tytul strony i naglowek HTML.
  59. $page_title = 'Zarejestruj się!';
  60. include ('./naglowek.inc');
  61.  
  62. // Jezeli jest jakis komunikat o bledzie, wyswietl go na stronie
  63. if (isset($message)) {
  64. echo '<font color="red">', $message, '</font>';
  65. }
  66. ?>
  67.  
  68. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  69. <fieldset><legend>Wprowadź do poniższego formularza informacje na swój temat:</legend>
  70.  
  71. <p><b>Nazwisko:</b> <input type="text" name="name" size="20" maxlength="40" value="<?php if (isset($_POST['name'])) echo $_POST['name']; ?>" /></p>
  72.  
  73. <p><b>Adres e-mail:</b> <input type="text" name="email" size="40" maxlength="60" value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>" /> </p>
  74.  
  75. <p><b>Nazwa użytkownika:</b> <input type="text" name="username" size="20" maxlength="40" value="<?php if (isset($_POST['username'])) echo $_POST['username']; ?>" /></p>
  76.  
  77. <p><b>Hasło:</b> <input type="password" name="password1" size="20" maxlength="40" /></p>
  78.  
  79. <p><b>Potwierdź hasło:</b> <input type="password" name="password2" size="20" maxlength="40" /></p>
  80. </fieldset>
  81.  
  82. <div align="center"><input type="submit" name="submit" value="Wyślij dane" /></div>
  83.  
  84. </form><!-- Koniec formularza -->
  85.  
  86. <?php
  87. include ('./stopka.inc'); // Dołącz stopkę HTML.
  88. ?>


Po wypełnieniu danych we formularzu i próbie wysłania otrzymuję następujący błąd:
Kod
Warning: mail() [function.mail]: SMTP server response: 550 Invalid recipient: mail@onet.pl in c:\usr\krasnal\www\dyn\rejestracja.php on line 49

Warning: Cannot modify header information - headers already sent by (output started at c:\usr\krasnal\www\dyn\rejestracja.php:49) in c:\usr\krasnal\www\dyn\rejestracja.php on line 50


Skrypt dokładnie sprawdziłem i jest taki sam jak w książce. Poza tym znalazłem przykłady do tej książki na serwerze Heliona i wkleiłem oryginalny. Ciągle taki sam błąd.
W opisie skryptu autor książki podał informację, że w przypadku problemów może coś być nie tak w pliku php.ini. Używam Krasnala i nie wiem o który plik php.ini chodzi. Jeden jest w katalogu Windowsa, drugi w c:\usr\php, trzeci w c:\usr\php5, czwarty w c:\usr\ini\php\5. OK, otwarłem ten z katalogu c:\windows i są tam następujące informacje:
Kod
[mail function]
; For Win32 only.
SMTP =localhost

; For Win32 only.
sendmail_from =admin@localhost

; For Unix only.  You may supply arguments as well (default: 'sendmail -t -i').
;sendmail_path =

Naprawdę nie wiem co może być przyczyną, że jestem informowany o nieprawidłowym odbiorcy w funkcji MAIL i że nagłówki już zostały wysłane.

Pozdrawiam,
Krzysiek
phpion
Uzyj google! Kurde - czy naprawde nie znacie tej wyszukiwarki??
http://www.google.pl/search?hl=pl&q=SM...+Google&lr=
Musashi
Te tematy z google nic mi nie pomogły.
Zmieniłem wszystkie pliki php.ini na dysku C (może ktoś mi odpowie który z tych kilku wystarczy zmienić?).
Miałem oryginalnie:
Kod
[mail function]
; For Win32 only.
SMTP =localhost

; For Win32 only.
sendmail_from =admin@localhost

; For Unix only.  You may supply arguments as well (default: 'sendmail -t -i').
;sendmail_path =


Dodałem jeszcze w linii pod SMTP =localhost port serwera, czyli smtp_port = 25, zrestartowałem Krasnala, lecz błąd jest dalej taki sam. Nie wiem o co chodzi. Mam wszystko zrobione tak, jak w tym temacie na forum:
http://forum.php.pl/index.php?showtopic=37778 .
Gdy kliknę ikonkę Krasnala prawym przyciskiem myszy mam oczywiście ptaszka przed napisem "SMTP Serv".
lopik
Nie wiem czy to pomoże.
Na stronie krasnala....

3. Co zrobić aby skrypty php wykorzystywały do wysyłania maili nasz serwer questionmark.gif?

KRASNAL ma domyślnie ustawiony zewnętrzny serwer SMTP, przez który wysyła pocztę, jeżeli chcemy wykorzystać nasz domowy serwer, należy z MENU wybrać
: USTAWIENIA->php->SERWER SMTP, następnie wpisać własny adres serwera za pośrednictwem którego będą wysyłane maile."
Musashi
Dziękuję za sugestię, lecz nic to nie pomogło.
Próbowałem ustawić na o2, czyli zmieniłem wartość SMTP na SMTP =smtp.o2.pl.
Otrzymuję wtedy następujący błąd:
Kod
Warning: mail() [function.mail]: SMTP server response: 554 <moj_nick@poczta.onet.pl>: Sender address rejected: Access denied in c:\usr\krasnal\www\dyn\rejestracja.php on line 49

Warning: Cannot modify header information - headers already sent by (output started at c:\usr\krasnal\www\dyn\rejestracja.php:49) in c:\usr\krasnal\www\dyn\rejestracja.php on line 50


Cytat(lopik @ 25.10.2006, 22:37:31 ) *
Nie wiem czy to pomoże.
Na stronie krasnala....

3. Co zrobić aby skrypty php wykorzystywały do wysyłania maili nasz serwer questionmark.gif?

KRASNAL ma domyślnie ustawiony zewnętrzny serwer SMTP, przez który wysyła pocztę, jeżeli chcemy wykorzystać nasz domowy serwer, należy z MENU wybrać
: USTAWIENIA->php->SERWER SMTP, następnie wpisać własny adres serwera za pośrednictwem którego będą wysyłane maile."


EDIT

Uff, spróbowałem jeszcze raz, pokombinowałem i poszło.
Ustawiłem SMTP na smtp.o2.pl, a kluczem do wszystkiego okazała się być zmiana wartości sendmail_from na moje konto właśnie w o2, czyli sendmail_from =moj_nick@o2.pl.
Czy ktoś mógłby mi jeszcze wytłumaczyć:
- który z plików php.ini na dysku C trzeba zmieniać (bo nie wierzę, że wszystkie)?
- skoro użyłem serwera na o2 i sendmail_from ustawiłem na swoje konto w o2, jaką wartość musi mieć sendmail_from, by po zmianie SMTP=localhost maile mi się wysyłały poprzez localhost?

Dziękuję za dotychczasową pomoc smile.gif Wreszcie działa.
Amorph
masz serwer mailowy postawiony u siebie?questionmark.gif
Masz konto mailowe na nim założone ?
Jeśli na oba pytania odpowiedziałeś tak to wszystko powinno działać smile.gif
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.