Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP] Problem z wysyłką maila z formularza
Forum PHP.pl > Forum > Przedszkole
PROGer
Dostaję komunikat iż wiadomość została wysłana poprawnie, ale ta nie dociera na skrzynkę pocztową:

index.php (fragment)
  1. <div class="row">
  2. <div class="col-sm-6 col-sm-offset-3">
  3. <form id="contact-form" role="form" action="php/contact_me.php">
  4. <div class="ajax-hidden">
  5. <div class="form-group wow fadeInUp">
  6. <label class="sr-only" for="c_name">Name</label>
  7. <input type="text" id="c_name" class="form-control" name="c_name" placeholder="Imię i nazwisko">
  8. </div>
  9.  
  10. <div class="form-group wow fadeInUp" data-wow-delay=".1s">
  11. <label class="sr-only" for="c_email">Email</label>
  12. <input type="email" id="c_email" class="form-control" name="c_email" placeholder="E-mail">
  13. </div>
  14.  
  15. <div class="form-group wow fadeInUp" data-wow-delay=".2s">
  16. <textarea class="form-control" id="c_message" name="c_message" rows="7" placeholder="Wiadomość ..."></textarea>
  17. </div>
  18.  
  19. <button type="submit" class="btn btn-lg btn-block wow fadeInUp" data-wow-delay=".3s">WYŚLIJ WIADOMOŚĆ</button>
  20. </div>
  21. <div class="ajax-response"></div>
  22. </form>
  23.  
  24. </div>
  25.  
  26. </div>



js (fragment)
  1. $('#contact-form').submit(function(e) {
  2.  
  3. e.preventDefault();
  4.  
  5. var c_name = $('#c_name').val();
  6. var c_email = $('#c_email').val();
  7. var c_message = $('#c_message ').val();
  8. var response = $('#contact-form .ajax-response');
  9.  
  10. if (( c_name== '' || c_email == '' || c_message == '') || (!isValidEmailAddress(c_email) )) {
  11. response.fadeIn(500);
  12. response.html('<i class="fa fa-warning"></i> Proszę wypełnić wszystkie pola formularza.');
  13. }
  14.  
  15. else {
  16. $('#contact-form .ajax-hidden').fadeOut(500);
  17. response.html("Wiadomość została wysłana. Odpowiem najszybciej jak to możliwe. Dziekuję za zainteresowanie ofertą.").fadeIn(500);
  18. }
  19. return false;
  20. });


contact_me.php
  1. <?php
  2.  
  3. if(empty($_POST['c_name']) ||
  4. empty($_POST['c_email']) ||
  5. empty($_POST['c_message']) ||
  6. !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
  7. {
  8. echo "Wysłanie wiadomości nie powiodło się! Proszę o kontakt bezpośredni na adres email: kontakt@xxx.pl.";
  9. sleep(10);
  10. return false;
  11. }
  12.  
  13. $c_name = $_POST['c_name'];
  14. $c_email = $_POST['c_email'];
  15. $c_message = $_POST['c_message'];
  16.  
  17. // create email body and send it
  18. $to = 'kontakt@xxx.pl'; // put your email
  19. $email_subject = "xxx: $c_name";
  20. $email_body = "$c_message";
  21.  
  22. $headers = "From: $c_email\n";
  23. $headers .="Content-type: text/html; charset=utf-8";
  24. $headers .= "Reply-To: $c_email";
  25.  
  26. mail($to,$email_subject,$email_body,$headers);
  27. header("Location: /");
  28. return true;
  29.  
  30.  
  31. ?>


Od rana nad tym siedzę i nie mogę zlokalizowac błędu wacko.gif

Prośba o wsparcie smile.gif
kapslokk
Rozumiem, że w $to jest podany inny email niż teraz? ;D

Z jakiego serwera korzystasz? Na pewno działa tam mail()? Może warto skorzystać z jakiegoś PHPMailera etc ?
PROGer
emaile podmieniłem teraz na potrzeby przedstawienia problemu na forum smile.gif uciekło mi tam .pl w przykładzie

hekko.pl oni działają na Roundcube Funkcja działa bo na innej stronie korzystam z tego skryptu. Z tym że w tamtym przypadku od razu po wysłaniu maila mam przekierowanie na stronę głównąi tyle. Tu natomiast chciałbym aby po wysłaniu maila pojawił się komunikat iż został on wysłany więc wprowadziłem js. Ale mail nie dociera na skrzynkę.
Do pliku js wchodzę na pewno bo pojawia się komunikat o wysłaniu maila, ale nie jestem pewny czy wchodzę do contact_me pomimo zrobienia action="php/contact_me.php
Jeśli w pliku contact_me powstawiam echo, nic nie drukuje. Jeśli mam rację do dlaczego z index.php nie wchodzę ostatecznie do contact_me.php?
kapslokk
Czyli problem rozwiązany, czy nadal maile nie dochodzą?

@edit
Dopiero teraz zauważyłem, że tak naprawdę Twój formularz się w ogóle nie wysyła. Masz e.preventDefault() i return false.

Spróbuj:
  1. $('#contact-form').submit(function(e) {
  2.  
  3. e.preventDefault();
  4.  
  5. var c_name = $('#c_name').val();
  6. var c_email = $('#c_email').val();
  7. var c_message = $('#c_message ').val();
  8. var response = $('#contact-form .ajax-response');
  9.  
  10. if (( c_name== '' || c_email == '' || c_message == '') || (!isValidEmailAddress(c_email) )) {
  11. response.fadeIn(500);
  12. response.html('<i class="fa fa-warning"></i> Proszę wypełnić wszystkie pola formularza.');
  13. }
  14.  
  15. else {
  16. $.ajax({
  17. type: "POST",
  18. data: {
  19. c_name: c_name,
  20. c_email: c_email,
  21. c_message: c_message
  22. },
  23. url: "php/contact_me.php",
  24. success: function(){
  25. $('#contact-form .ajax-hidden').fadeOut(500);
  26. response.html("Wiadomość została wysłana. Odpowiem najszybciej jak to możliwe. Dziekuję za zainteresowanie ofertą.").fadeIn(500);
  27. }
  28. })
  29.  
  30. }
  31. return false;
  32. });
trueblue
Plik php nie jest w ogóle wywoływany.
PROGer
Tak podejrzewałem (napisałem to powyżej). Natomiast nie jeste w stanie stwierdzić dlaczego. To:

  1. <form id="contact-form" role="form" action="php/contact_me.php">


nie załatwia sprawy? Jeśli nie to gdzie fo mam wywołać i w jaki sposób?
kapslokk
Nie załatwia sprawy, bo masz e.preventDefault().
Wyżej w poście podałem nowy javascript, który powinien działać smile.gif
PROGer
kapslokk po podmianie twojego javascriptu, jak wywołuje akcję "wyślij wiadomość" na formularzu. Nic się nie dzieje - brak jakiejkolwiek reakcji, nie wyświetla się nawet informacja o wysłaniu wiadomości.
Fred1485
W konsoli jakie błędy dostajesz?
PROGer
Na żywo to sprawdzam.

Mam taką strukturę katalogów na serwerze:

../public_html/assets/php/contact_me.php

Jak poprawię ścieżkę w taki sposób:
url: "assets/php/contact_me.php",

to po wywołaniu akcji wyśli na formularzu i upływie 5-9 sekund mam info że wiadomość została wysłana, ale ta nadal nie dociera na skrzynkę.

EDIY:
W pliku contact_me.php mam ustawionego sleepa na 10 sekund stąd to opóźnienie o którym pisałem powyżej:

  1. if(empty($_POST['c_name']) ||
  2. empty($_POST['c_email']) ||
  3. empty($_POST['c_message']) ||
  4. !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
  5. {
  6. echo "Wysłanie wiadomości nie powiodło się! Proszę o kontakt bezpośredni na adres email: kontakt@xxx.pl.";
  7. sleep(10);
  8. return false;
  9. }

Kiedy wywaliłem sleep`a formularz od razu wyświetla mi info że wiadomość została wysłana. Morał z tego taki że występuje poprawne przekierowanie na plik contact_me.php ale wartości w POST są puste, a za to powinien odpowiadać ten kawałek kodu w pliku js:
  1. data: {
  2. c_name: c_name,
  3. c_email: c_email,
  4. c_message: c_message
  5. },


EDIT:

znalazłem literówkę w contact_me.php która widać nawet w przytoczonym wyżej fragmencie kodu:

zamiast:
  1. !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))


powinno być:

  1. !filter_var($_POST['c_email'],FILTER_VALIDATE_EMAIL))


dzięki za pomoc, w szczególności kapslokk 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.