1. Forum używa plików Cookies. Dowiedz się więcej o celu ich używania i możliwości zmiany ustawień Cookies w przeglądarce. Czytaj więcej...

ROZWIĄZANE Mail () - problem z formularzem kontaktowym

Dyskusja w 'Zabezpieczenia antyspamowe' rozpoczęta przez użytkownika gregre, 31 Sierpień 2016.

  1. gregre

    gregre Bywalec

    Wiadomości:
    16
    Docenione treści:
    1
    Formularz kontaktowy na moim Wordpressie używa funkcji mail(). Męczyłem się z tym dłuższy czas, aż w końcu zainstalowałem jedną z rekomendowanych wtyczek SMTP. Skonfigurowałem ją zdaje się jak należy (wg wskazówek w polu From wpisałem adres przypisany do serwera na którym jest domena i skrzynka docelowa), a jednak problem nie zniknął. Ze swojego formularza kontaktowego mogę wysłać wiadomość jedynie wtedy, gdy w polu mail nadawcy wpiszę adres przypisany do tego samego serwera. Na każdy inny reaguje odmową. Nie wiem czy to problem z Wordpressem czy home.pl, dlatego najpierw szukam pomocy tutaj. Jakieś pomysły?
     
  2. Grzesiek

    Grzesiek Centrum Pomocy home.pl

    Wiadomości:
    3 660
    Docenione treści:
    333
    Prawdopodobnie wtyczka podmienia zbyt wiele pól, podaj proszę nazwę wtyczki i jej konfigurację (wraz z nazwami pól oraz wprowadzonymi wartościami). Gdzie możemy zobaczyć działanie formularza?

    @Mariusz ty jesteś specem od takich tematów.
     
  3. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    oznacza to, że Twój formularz kontaktowy podaje w polu from adres e-mail podany w formularzu, a tak być nie powinno. Wiadomość wysłana z formularza kontaktowego (musi mieć podany w polu from adres e-mail skrzynki, która jest utworzona w home.pl). Przykładowo, powinieneś ustawić to tak, aby wszystkie wiadomości z formularza były wysyłane z adresu: "formularz@twojadomena.pl".

    Teraz pojawia się pytanie, a co się stanie jak będę próbował wysłać odpowiedź na taką wiadomość. Czy nie będę przypadkiem wysyłał odpowiedzi na adres: "formularz@twojadomena.pl" zamiast do właściwego użytkownika? W tym miejscu na ratunek przychodzą dodatkowe nagłówki do wiadomości. Przykładowo, taki poniższy dodatkowy nagłówek dodałem przy konfiguracji wtyczki Contact Form 7 dla Wordpressa:
    Kod:
    Reply-to: [your-name] <[your-email]>
    Jest to możliwe do skonfigurowania na każdym Wordpressie. Podaj więcej informacji, może zrzuty ekranu.
     
  4. gregre

    gregre Bywalec

    Wiadomości:
    16
    Docenione treści:
    1
    Dzięki serdeczne za podjęcie tematu.

    Wtyczka to https://pl.wordpress.org/plugins/wp-mail-smtp/

    Poniżej przedstawiam wrzucam screeny schematu konfiguracji, gdzie mail@mojadomena.pl znajduje się na tym samym serwerze co adres kontakt@mojadomena.pl, który określiłem w formularzu jako adres, na który ma spływać poczta. W edytorze formularza, który jest zintegrowany ze skórą, na której zbudowałem stronę nie ma miejsca na wpisanie niec innego jak tylko adres skrzynki odbiorczej.

    smtp1.jpg


    smtp2.jpg
     
  5. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Będę potrzebował dostęp do plików tego formularza. Najlepiej, jeśli załączysz plik jako załącznik do tego tematu. Wymagana będzie zmiana w formularzu zintegrowanym ze skórką. Wtyczka WP-Mail SMTP jest poprawnie skonfigurowana.
     
  6. gregre

    gregre Bywalec

    Wiadomości:
    16
    Docenione treści:
    1
    Załączam cały plik instalacyjny skóry. Nie mogę odnaleźć plików formularza kontaktowego. Wydaje mi się, że powinien znajdować się w folderze widgets jako contact details (pod taką nazwą występuje w edytorze) razem z pozostałymi widgetami, ale go tam nie ma. Będę ogromnie wdzięczny za wszelką pomoc.
     

    Załączone pliki:

    Mariusz lubi to.
  7. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    @gregre nie obiecuję, że dzisiaj to sprawdzę, ale jutro jak najbardziej :). Proszę o cierpliwość, chyba że ktoś mnie uprzedzi...
     
    gregre lubi to.
  8. gregre

    gregre Bywalec

    Wiadomości:
    16
    Docenione treści:
    1
    Dziękuję serdecznie :)
     
  9. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    @gregre ok, udało się znaleźć.

    W tym katalogu znajdziesz plik o nazwie email.php:
    Kod:
    \plugins\blahlab-framework\blahlab-framework\

    W tym pliku znajdziesz taki fragment kodu odpowiedzialny za funkcję mail, który zmodyfikowałem. Do załącznika dodaję zmodyfikowany plik. Pobierz go i go zastąp na serwerze (koniecznie zrób wcześniej kopię zapasową tego starego pliku). Po skopiowaniu i nadpisaniu pliku, przejdź do jego edycji i w tym miejscu podaj adres e-mail utworzony na serwerze, który będzie służył do wysyłania wiadomości z formularza:
    Kod:
    $headers = "From: " . $name . "<mail@twojadomena.pl>";
    Po zapisaniu zmian, wiadomości powinny być wysyłane poprawnie, ponieważ w nagłówku wiadomości zostanie wysłana informacja o adresie e-mail istniejącym na serwerze. Jeśli to nie pomoże daj znać, bo taka możliwość też może być (wtedy może się przydać kopia zapasowa tego starego pliku, który nadpisałeś).
     

    Załączone pliki:

    • email.php
      Rozmiar pliku:
      954 bytes
      Wyświetleń:
      3 219
  10. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    @gregre jeśli nie zadziała zaproponowana powyżej przez ze mnie modyfikacja, to nadpisz ten fragment kodu:

    Kod:
      $name = $_POST['name'];
      $subject = $_POST['subject'];
      $body = stripslashes($_POST['message']);
      $body .= "\n\n sent from " . get_bloginfo('name');
      $from = $_POST['email'];
      $headers = "Reply-To: " . $from;
      $headers = "From: " . $name . "<mail@twojadomena.pl>";
      $error_messages = array();

    za pomocą tego fragmentu kodu (pamiętając przy tym, aby zamiast adresu "mail@twojadomena.pl" podać adres istniejącej skrzynki na Twoim serwerze):
    Kod:
      $name = $_POST['name'];
      $subject = $_POST['subject'];
      $body = stripslashes($_POST['message']);
      $body .= "\n\n sent from " . get_bloginfo('name');
      $from = "mail@twojadomena.pl";
      $from2 = $_POST['email']
      $headers = "Reply-To: " . $from2;
      // $headers = "From: " . $name . "<" . $from . ">";
      $error_messages = array();
    
     
  11. gregre

    gregre Bywalec

    Wiadomości:
    16
    Docenione treści:
    1
    Dziękuję ogromnie! Odnalazłem plik i wyedytowałem go. Formularz wysyła maile. Dochodzą na podaną skrzynkę. Jednak jest problem z odpowiedzią - poczta chce wysyłać odpowiedź na skrzynkę, którą zdefiniowaliśmy w from. Nie wyświetla w ogóle adresu do kontaktu, który wpisuje nadawca. Czy wiesz, co powinienem zrobić? Pisałeś o tym wczoraj, ale nie jest to dla mnie jasne.

     
  12. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Właśnie o tym myślałem i dlatego zaproponowałem drugą modyfikację w drugim moim poście. Skorzystałeś z tego pierwszego kodu czy drugiego (moja pierwsza odpowiedź czy druga)?

    Te trzy linie kodu w drugim zaproponowanym przez ze mnie rozwiązaniu powinny spowodować, że odpowiedzi będą wysyłane na poprawny adres e-mail użytkownika, który wysłał zapytanie z formularza.
    Kod:
    $from = "mail@twojadomena.pl";
    $from2 = $_POST['email']
    $headers = "Reply-To: " . $from2;
     
  13. gregre

    gregre Bywalec

    Wiadomości:
    16
    Docenione treści:
    1
    Z pierwszego. To w takim razie już podmieniam te trzy linie.
     
  14. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Najlepiej podmień cały ten kod, tak jak podałem w drugim moim poście.
     
  15. gregre

    gregre Bywalec

    Wiadomości:
    16
    Docenione treści:
    1
    Zamieniłem, ale przestał wysyłać jakiekolwiek maile. Sprawdzałem trzy razy czy nic nie pomyliłem. Tak, podmieniłem mail@mojadomena.pl na właściwy adres :)
     
  16. gregre

    gregre Bywalec

    Wiadomości:
    16
    Docenione treści:
    1
    Tak zrobiłem.
     
  17. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Dam znać w takim razie do wieczora lub jutro. Podeślij mi proszę tylko info w wiadomości prywatnej pod jakim adresem mogę wyświetlić ten formularz, będę musiał coś sprawdzić. (Odpisuję teraz z telefonu).
     
    gregre lubi to.
  18. gregre

    gregre Bywalec

    Wiadomości:
    16
    Docenione treści:
    1
    Dziękuję. Wysłałem wiadomość.
     
  19. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Zrobiłem pewne modyfikacje... (zmieniłem zawartość pliku email.php). Proszę sprawdź teraz jak działa Twój formularz. Jak potwierdzisz, że teraz formularz działa poprawnie jak należy, to opiszę w tym temacie jakie zmiany wykonałem w pliku email.php.
     
  20. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    @gregre ustawiam temat jako rozwiązany, wiadomości są już wysyłane poprawnie z adresu istniejącego na serwerze w home.pl, a odpowiedzi na te wiadomości są wysyłane na poprawny adres e-mail nadawcy.

    Wszelkie modyfikacje zostały wykonane w pliku email.php. Poniżej prezentuję starą zawartość pliku email.php:
    Kod:
    $name = $_POST['name'];
    $subject = $_POST['subject'];
    $body = stripslashes($_POST['message']);
    $body .= "\n\n sent from " . get_bloginfo('name');
    $from = $_POST['email'];
    // $headers = "Reply-To: " . $from;
    $headers = "From: " . $name . "<" . $from . ">";

    A tak prezentuje się poprawiony kod, który pozwala na poprawne wysyłanie wiadomości e-mail z formularza:
    Kod:
    $name = $_POST['name'];
    $subject = $_POST['subject'];
    $body = stripslashes($_POST['message']);
    $body .= "\n\n sent from " . get_bloginfo('name');
    $from = "mail@twojadomena.pl";
    $from2 = $_POST['email'];
    $headers = "Reply-To: " . $from2;
    // $headers = "From: " . $name . "<" . $from . ">";

    Jak widać utworzona została nowa zmienna o nazwie $from2. W pierwszej zmiennej $from ustawiliśmy poprawny adres e-mail istniejący na serwerze, z którego będą wysyłane wiadomości z formularza kontaktowego, natomiast w drugiej zmiennej określiliśmy, aby podany był adres e-mail wpisany przez użytkownika w formularzu. W zmiennej $headers wysyłamy dodatkowy nagłówek do wiadomości, w której "prosimy", aby odpowiedzi były wysyłane na adres e-mail podany w drugiej zmiennej $from2.
     
    gregre lubi to.

Poleć forum znajomym