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 Problem z wysyłką maili poprzez aplikację Wordpress - funkcja wp_mail()

Dyskusja w 'WordPress, Joomla!, PHP, HTML, CSS' rozpoczęta przez użytkownika res, 9 Lipiec 2015.

  1. res

    res Początkujący

    Wiadomości:
    5
    Docenione treści:
    2
    Witam.
    Mam następujący problem: na stronie opartej o Wordpress istnieje możliwość rezerwacji pokoi. Podczas procesu rezerwacji potencjalny klient podaje różne dane i swój adres e-mail. System rezerwacji generuje na końcu dwie wiadomości e-mail. Jedną do klienta z potwierdzeniem przyjęcia rezerwacji, drugą do administratora strony. Pierwsza wiadomość (na zewnętrzny adres e-mail) dochodzi, natomiast wiadomość do administratora nie dochodzi, mimo, że adres e-mail admina został utworzony na serwerze, na którym jest strona.

    Podczas rozmowy telefonicznej z konsultantem home.pl przetestowaliśmy przykładową rezerwację i okazało się, że
    skrypt odpowiedzialny za wysyłkę traktuje adres e-mail podawany przez klienta jako adres nadawcy i nie wysyła wiadomości do admina.

    Opisana sytuacja trwa od jakiegoś czasu, wcześniej maile dochodziły dobrze.

    Proszę o pomoc w rozwiązaniu tego problemu.
     
    Mariusz i a.m lubią to.
  2. Grzesiek

    Grzesiek Centrum Pomocy home.pl

    Wiadomości:
    3 660
    Docenione treści:
    333
    W tej sytuacji trzeba by dokonać weryfikacji budowy skryptu rezerwacji, zapewne jest to związane z błędnym opisem pól.

    Jeśli chciałbyś abyśmy spróbowali zweryfikować ten problem, napisz więcej szczegółów, np. wklej budowę skryptu, wskaż adresy e-mail jakie zostały dodane. Interesuje nas także zrzut ekranu np. z konfiguracji skryptu/panelu formularza z wp-admina.
     
  3. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Witaj @res na naszym forum :) Potrzebowalibyśmy więcej informacji na temat Twojego formularza kontaktowego. W przypadku formularzy kontaktowych dostępnych w gotowych rozwiązaniach (np. WordPress), wystarczającym rozwiązaniem może okazać się wpisanie w polu „Od:” adresu e-mail dla skrzynki utworzonej na serwerze, z którego następuje wysyłka z formularza kontaktowego.

    Z Twojego postu wynika, że skrypt próbuje wysłać wiadomość korzystając z adresu e-mail wpisanego przez klienta w formularzu (jako adres nadawcy wiadomości z formularza podawany jest adres wpisany przez klienta). Tego nasze serwery pocztowe nie przepuszczą, wysyłka ze skryptu znajdującego się na serwerze w home.pl, musi zostać zrealizowana z wykorzystaniem adresu e-mail, który znajduje się na tym samym serwerze w home.pl.

    Dodaję link do artykułu w naszej pomocy, gdzie można znaleźć więcej informacji: https://pomoc.home.pl/baza-wiedzy/formularz-kontaktowy-na-stronie-www-nie-wysyla-wiadomosci/
     
  4. res

    res Początkujący

    Wiadomości:
    5
    Docenione treści:
    2
    Witam ponownie. Artykuł z pomocy czytałem już wcześniej. Korzystam na stronie, o której mowa z Contact Form 7, ale ten formularz nie stwarza problemów bo jest skonfigurowany zgodnie z instrukcjami z Waszej pomocy. Natomiast skrypty odpowiedzialne za rejestrację pokoi (i chyba za wysyłkę maili) są napisane na sztywno we wtyczce dołączonej do szablonu WP. Jedynym miejscem, które podlega konfiguracji z poziomu admina WP to miejsce do wpisania adresu e-mail (załączam screen). W miejscu tym podałem adres e-mail utworzony na tym samym serwerze home.pl.
    Jeśli to ma pomóc, to mogę przesłać pliki wtyczki skopiowane do txt.

    Pozdrawiam
     

    Załączone pliki:

    • screen.jpg
      screen.jpg
      Rozmiar pliku:
      88,2 KB
      Wyświetleń:
      2 511
  5. Grzesiek

    Grzesiek Centrum Pomocy home.pl

    Wiadomości:
    3 660
    Docenione treści:
    333
    Czyli w polu e-mail podajesz swój adres na który chcesz otrzymać powiadomienie. Użytkownik wchodzi, dokonuje rezerwacji i otrzymuje powiadomienie o zgłoszeniu, a ty powiadomienie o nowej rezerwacji.

    Wszystko wskazuje na to, że formularz korzystając z funkcji mail, faktycznie podaje adres klienta jako adres nadawcy. W ten sposób po kliknięciu przycisku Odpowiedz, od razu leci odpowiedź do klienta. Nie mniej powoduje to też konflikt z naszymi zabezpieczeniami, gdzie skrypt przedstawia się adresem z poza serwera.

    Podeślij nam proszę, mi i @Mariusz w prywatnej wiadomości pliki tej wtyczki. Zapewne brakuje w niej wpisu o którym pisał już Mariusz, zobaczymy co da się zrobić.
    Ten temat faktycznie wykracza poza standardowe wsparcie home.pl, ale... jesteśmy na forum ;) wszyscy patrzą! Napisz i daj nam chwilę na analizę.
     
  6. res

    res Początkujący

    Wiadomości:
    5
    Docenione treści:
    2
    Czy w prywatnej wiadomości w ramach forum można dodawać załączniki?
     
  7. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Jeśli nie miałeś możliwości dodania wcześniej pliku do załącznika, to już powinieneś mieć taką możliwość.

    Na pierwszy rzut oka, powiedziałbym że brakuje zdefiniowania odpowiedniego adresu nadawcy dla wiadomości e-mail, które mają być wysyłane przez formularz kontaktowy. Prześlij pliki, może uda nam się Ciebie nakierować na wprowadzenie odpowiednich zmian w przesyłanych nagłówkach.
     
  8. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Temat z użytkownikiem @res prowadzony jest w wiadomości prywatnej, z uwagi na pojawienie się plików użytkownika. Jeśli będziemy mieli więcej informacji, które przydadzą się potomnym, opublikujemy je w tym temacie.
     
  9. TheL

    TheL @Lider VIP Beta-tester

    Wiadomości:
    2 403
    Docenione treści:
    535
    Może nie koniecznie trafnie, ale z doświadczenia z różnymi skryptami wysyłającymi maile wystarczy je odrobinkę zmodyfikować aby zgodnie z tym o czym pisze home.pl w pomocy adres NADAWCY znajdował się na serwerze na którym uruchomiony jest skrypt - dotyczy to maili wysyłanych przez funkcję mail()
    9/10 problemów z mailami dotyczy właśnie tej sytuacji, a każdy skrypt można poprawić w prosty sposób wyszukując funkcję mail i zmieniając często jedną linię (ewentualnie elementy headera From:) Home.pl już jakiś czas temu wprowadziło takie ograniczenie, co uważam za dobry krok w kierunku bezpieczeństwa i zmniejszenia ilości spamu.
     
  10. Grzesiek

    Grzesiek Centrum Pomocy home.pl

    Wiadomości:
    3 660
    Docenione treści:
    333
    @TheL zabezpieczenie sprawdza się i przyniosło wiele korzyści, chociaż faktycznie wymaga modyfikacji kodu, nie zawsze ale jednak. Z naszego punktu widzenia, to duże zmniejszenie ilości spamu i zgłoszeń z tym związanych, dla klienta, ochrona adresu IP i mniejsze ryzyko trafienia na listę RBL. Kto na tym więcej zyskał, cóż, kwestia podejścia do tematu. Nie mniej działamy i staramy się pomóc w przypadku wątpliwości.
     
  11. TheL

    TheL @Lider VIP Beta-tester

    Wiadomości:
    2 403
    Docenione treści:
    535
    Ja również uważam, że to rozwiązanie jest bardzo dobre i więcej pomaga niż szkodzi, a właściwie to nic nie szkodzi wymaga tylko niewielkiej pracy przy modyfikacji części skryptów co jest wbrew pozorom naprawdę proste.
     
  12. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Wybacz, za dłuższy okres oczekiwania. Udało nam się po weekendzie wszystko ustalić. Faktycznie skrypt wymaga małej modyfikacji, ale trochę innej niż ta opisywana w naszych artykułach pomocy. Informacje o rozwiązaniu zaraz zostaną dodane również do naszych artykułów.

    Cała sytuacja spowodowana jest tym, że formularz rezerwacji nie definiuje adresu e-mail nadawcy wiadomości. Wordpress, a dokładniej wtyczka (nation-book) służąca do rezerwacji, korzysta z własnej funkcji wp_mail() , dla której to musimy teraz zdefiniować from. W tym celu w skrypcie użytkownika @res należy zamienić jedną z linijek kodu na inną, która spowoduje wymuszenie próby wysyłki wiadomości za pośrednictwem podanego adresu e-mail.

    W pliku utility-functions.php znajdź:
    Kod:
    nation_send($bookingSettings->email, $email , $subject, $email_content);

    Zamień na:

    Kod:
    $email = "adres@twojadomena.pl"; 
    nation_send($email, $email , $subject, $email_content);
    Przy czym należy pamiętać, że zdefiniowany adres musi należeć do skrzynki e-mail, która utworzona jest na tym samym serwerze co skrypt do wysyłania maili.

    WAŻNE! Jest to modyfikacja, o której należy pamiętać. Jeśli przy kolejnej aktualizacji szablonu, aplikacji CMS lub wtyczki zmiany zostaną nadpisane przez przeprowadzoną aktualizację, to należy pamiętać, aby ponownie rzucić okiem na skrypt do wysyłki. Warto też zgłosić fakt o braku możliwości zdefiniowania pola from do autora wtyczki.
     
    Grzesiek lubi to.
  13. TheL

    TheL @Lider VIP Beta-tester

    Wiadomości:
    2 403
    Docenione treści:
    535
    Chwilka, a nie jest tak, że trzeba zmienić na:
    Kod:
    nation_send($bookingSettings->email, adres@twojadomena.pl , $subject, $email_content);
    nie mam pewności bo nie mam możliwości aktualnie zainstalować dla testu wordpressa.
     
    Mariusz lubi to.
  14. TheL

    TheL @Lider VIP Beta-tester

    Wiadomości:
    2 403
    Docenione treści:
    535
    Tak sobie na to patrzyłem i gdybym dosłownie zastosował się do tego wykasowałbym poprzednią linię i wstawił nową, dlatego o tym wspomniałem.
     
  15. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Masz rację do mojej pierwszej wersji posta wkradł się błąd, za co jak najbardziej przepraszam. Teraz kod jest poprawny. Rozwiązanie było testowane, ale wkleiłem kod bez brakującej jednej ważnej linijki.
     
  16. TheL

    TheL @Lider VIP Beta-tester

    Wiadomości:
    2 403
    Docenione treści:
    535
    i pytanie w związku z tym, czy nie wpłynie to na informację z jakiego maila ktoś napisał? tzn jeśli w treści też mieliśmy użytą zmienną email to czy nie będzie ona zastąpiona tym przypisaniem? dlatego tu pomysłem moim było wpisanie na sztywno adresu, a pozostawienie w zmiennej oryginalnego adresu nadawcy. Oczywiście mogę się mylić bo nie mam tego przed sobą i nie widzę jaki tam jest kod.
     
  17. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Twoje rozwiązanie również jest poprawne, ale w przypadku użytkownika @res wysyłane są dwie wiadomości e-mail. Jedna do klienta, druga do administratora. Proponowana przez nas modyfikacja dotyczy jedynie wywołania funkcji dla powiadomienia wysyłanego do admina, ponieważ wiadomości do klienta są przesyłane poprawnie (email_to brane jest z formularza). Pola from oraz to są teraz ustawione na ten sam adres e-mail, czyli adres do admina. W tej chwili skrypt przepuszcza już wiadomości do administratora. Wcześniejsza konstrukcja funkcji nie pozwalała na zrealizowanie takiej wysyłki. Wiadomości do klienta były i są wysyłane prawidłowo (inna konstrukcja i wywołanie funkcji)

    @TheL Twoje rozwiązanie jest dobre, ale musiałoby w tym przypadku wyglądać tak:
    Kod:
    nation_send("adres@twojadomena.pl", "adres@twojadomena.pl" , $subject, $email_content);
     
  18. TheL

    TheL @Lider VIP Beta-tester

    Wiadomości:
    2 403
    Docenione treści:
    535
    Ok wszystko jasne, myślę, że dzięki temu nikt nie powinien już mieć z tym problemów wyjaśnione jest bardzo dokładnie.
     

Poleć forum znajomym