Formularz WordPress nie wysyła maili: przyczyny i jak to naprawić

Świecące ikony kopert na ciemnym tle

Klient dzwoni i pyta, dlaczego nikt nie odpowiedział na jego wiadomość sprzed dwóch tygodni. Zaglądasz do skrzynki: pusto. Wchodzisz na stronę, wypełniasz formularz, widzisz zielony komunikat „Dziękujemy, wiadomość została wysłana”. I nadal nic nie przychodzi.

To jeden z najczęstszych i najbardziej podstępnych problemów na stronach WordPress. Podstępny, bo formularz wygląda na sprawny. Komunikat o sukcesie oznacza tylko, że strona przekazała wiadomość dalej, a nie że ktoś ją dostał. Właściciel zwykle dowiaduje się o awarii po tygodniach, od zirytowanego klienta albo wcale.

Poniżej znajdziesz przyczyny, przez które formularz WordPress nie wysyła maili, i sposób, żeby każdą z nich sprawdzić samodzielnie.

Dlaczego WordPress nie wysyła maili

WordPress domyślnie wysyła pocztę przez funkcję PHP mail() serwera, na którym stoi strona. Nie loguje się przy tym do żadnej prawdziwej skrzynki. Z punktu widzenia Gmaila czy Onetu wygląda to tak, jakby ktoś nieznany wysyłał list z Twoim adresem na kopercie.

Tak samo działają Contact Form 7, WPForms, Elementor Forms i WooCommerce. Wszystkie korzystają z tej samej funkcji WordPressa, więc jeśli contact form 7 nie wysyła maili, to bardzo często woocommerce też nie wysyła maili o zamówieniach. Problem leży zwykle niżej niż w samej wtyczce formularza.

Siedem najczęstszych przyczyn

1. Brak uwierzytelnienia SPF i DKIM

Co się dzieje: od 1 lutego 2024 Gmail wymaga od wszystkich nadawców uwierzytelnienia domeny przez SPF lub DKIM. Yahoo zaczęło egzekwować podobne zasady w tym samym miesiącu. SPF to wpis w DNS domeny, który mówi, jakie serwery mogą wysyłać pocztę w jej imieniu. DKIM to cyfrowy podpis wiadomości. Mail wysłany z hostingu przez mail() często nie ma ani jednego, ani drugiego.

Skutek: wiadomość ląduje w spamie albo jest odrzucana, zanim dotrze do skrzynki.

Jak sprawdzić: wyślij formularz na adres w Gmailu. Otwórz wiadomość (także jeśli jest w spamie), kliknij trzy kropki obok przycisku „Odpowiedz” i wybierz „Pokaż oryginał”. Na górze zobaczysz wiersze SPF, DKIM i DMARC z wynikiem PASS albo FAIL. Każde FAIL albo brak wiersza to sygnał do poprawy.

2. Adres nadawcy z innej domeny niż strona

Co się dzieje: w ustawieniach formularza jako nadawca wpisany jest adres w stylu twojafirma@gmail.com albo adres klienta, który wypełnił formularz. Strona stoi na twojafirma.pl, a podpisuje się cudzą domeną.

Skutek: serwery pocztowe uznają to za podszywanie się i odrzucają wiadomość. Dokumentacja WooCommerce wprost zaleca nadawcę z własnej domeny zamiast publicznej skrzynki.

Jak sprawdzić: w Contact Form 7 otwórz formularz, zakładkę „Poczta” i pole „Od”. Powinien tam być adres z domeny strony, na przykład formularz@twojafirma.pl. Adres klienta wpisz w pole „Dodatkowe nagłówki” jako Reply-To, wtedy nadal odpowiesz mu jednym kliknięciem.

3. Brak wtyczki SMTP

Co się dzieje: strona wysyła przez mail() serwera zamiast przez prawdziwą skrzynkę pocztową albo usługę do wysyłki.

Skutek: nawet poprawny formularz ma słabą dostarczalność, a Ty nie masz żadnego śladu, co się z wiadomością stało.

Jak sprawdzić i naprawić: wejdź w „Wtyczki” i zobacz, czy masz zainstalowaną WP Mail SMTP, Post SMTP albo FluentSMTP. Jeśli nie, zainstaluj jedną z nich i połącz ją ze skrzynką w swojej domenie albo z usługą do wysyłki maili. Każda z nich ma przycisk wysłania wiadomości testowej i log wysłanych maili, w którym widać błędy. To najczęściej rozwiązuje problem „wordpress nie wysyła maili” za jednym zamachem.

4. Antyspam blokuje prawdziwe zgłoszenia

Co się dzieje: wtyczki antyspamowe, na przykład CleanTalk, oceniają każde zgłoszenie. Czasem uznają za spam prawdziwego klienta, bo pisze z sieci firmowej, przez VPN albo używa słów kojarzonych ze spamem.

Skutek: klient widzi komunikat o wysłaniu albo ogólny błąd, a wiadomość nigdy nie trafia do Ciebie.

Jak sprawdzić: zajrzyj do panelu wtyczki antyspamowej i przejrzyj listę zablokowanych zgłoszeń. Jeśli widzisz tam normalne zapytania od klientów, poluzuj ustawienia albo dodaj wyjątki.

5. Źle ustawiona reCAPTCHA lub Turnstile

Co się dzieje: klucze reCAPTCHA albo Cloudflare Turnstile są przypisane do innej domeny, wygasły, ktoś przeniósł stronę na nowy adres albo pomieszał wersje reCAPTCHA.

Skutek: weryfikacja kończy się błędem i formularz w ogóle nie wysyła. Czasem dzieje się to bez żadnego widocznego komunikatu.

Jak sprawdzić: wypełnij formularz w oknie prywatnym przeglądarki. Jeśli pojawi się błąd albo przycisk kręci się bez końca, sprawdź w panelu Google reCAPTCHA lub Cloudflare, czy domena strony jest na liście dozwolonych.

6. Cache strony psuje formularz

Co się dzieje: formularz WordPressa zawiera jednorazowy kod bezpieczeństwa, tak zwany nonce, który ma ograniczoną ważność. Wtyczka cache zapisuje stronę razem z tym kodem i podaje ją odwiedzającym przez długi czas.

Skutek: po jakimś czasie kod wygasa i formularz kontaktowy wordpress nie działa, choć wczoraj działał. Najgorsze, że problem pojawia się i znika razem z czyszczeniem cache.

Jak sprawdzić: wyczyść cache i od razu przetestuj formularz. Jeśli teraz działa, a następnego dnia znowu nie, wyklucz stronę z formularzem z cache albo skonfiguruj wtyczkę cache zgodnie z instrukcją wtyczki formularza.

7. Zły adres odbiorcy albo pełna skrzynka

Co się dzieje: w ustawieniach formularza wpisany jest adres byłego pracownika, adres z literówką albo skrzynka, która się zapełniła. W WooCommerce powiadomienia o zamówieniach mogą iść na adres, którego nikt nie czyta.

Skutek: mail wychodzi poprawnie, tylko trafia donikąd.

Jak sprawdzić: w Contact Form 7 sprawdź pole „Do” w zakładce „Poczta”. W WooCommerce wejdź w „WooCommerce”, „Ustawienia”, „E-maile” i sprawdź odbiorcę przy każdym typie wiadomości. Zaloguj się do skrzynki docelowej i zobacz, czy jest na niej miejsce.

Jak przetestować formularz w 10 minut

  1. Wyślij formularz na Gmaila. Ustaw tymczasowo odbiorcę na swój adres w Gmailu, wypełnij formularz i sprawdź skrzynkę odbiorczą oraz folder Spam.
  2. Sprawdź „Pokaż oryginał”. Szukasz trzech razy PASS: SPF, DKIM i DMARC.
  3. Zajrzyj do logu wtyczki SMTP. Jeśli wiadomość ma status błędu, log zwykle mówi, dlaczego.
  4. W WooCommerce sprawdź log maili. Dokumentacja WooCommerce wskazuje „WooCommerce”, „Status”, „Logi” i źródło transactional-emails. Widać tam, czy mail o zamówieniu został wysłany, czy nie.
  5. Przepuść maila przez mail-tester.com. Strona poda Ci jednorazowy adres. Wyślij na niego formularz, a dostaniesz ocenę i listę konkretnych problemów, w tym brakujące wpisy DNS.

Pamiętaj, że jeden udany test nic nie gwarantuje na przyszłość. Formularze psują się po aktualizacji wtyczki, zmianie hostingu, odnowieniu domeny albo zmianie w DNS. Nikt wtedy nie dostaje powiadomienia, że coś przestało działać.

Dlaczego nikt tego nie zauważa

Strona nie pokazuje błędu. Klient widzi „wysłano” i czeka. Ty nie dostajesz maila, ale nie wiesz, że powinieneś go dostać. Cisza w skrzynce wygląda jak słabszy tydzień, a nie jak awaria.

Dlatego warto sprawdzać formularze regularnie, a nie tylko raz po zbudowaniu strony. Możesz to robić ręcznie raz w tygodniu albo zostawić to narzędziu. Wtyczka Eyesite Monitor sprawdza, czy formularze na stronie naprawdę wysyłają wiadomości, i daje znać, gdy przestaną. Pilnuje też, czy strona działa i czy nikt się na nią nie włamał.

Co zrobić teraz

1. Zrób dziś test na Gmaila. Wyślij formularz ze swojej strony i sprawdź „Pokaż oryginał”. To pięć minut, a od razu wiesz, na czym stoisz.

2. Sprawdź swoją domenę skanerem. Darmowy skaner na eyesite.pl/skaner w kilkanaście sekund pokaże, czy domena ma poprawne SPF, DKIM i DMARC, czyli czy maile ze strony mają szansę dojść.

3. Zainstaluj darmową wtyczkę Eyesite Monitor. Pobierz ją tutaj. Będzie pilnować formularzy, maili i działania strony, a o problemie dowiesz się Ty, zanim zadzwoni klient.

Formularz kontaktowy to często jedyna droga, którą nowy klient do Ciebie trafia. Warto wiedzieć, że ta droga jest otwarta.

Źródła