
TL;DR: Jeśli formularz kontaktowy na WordPressie pokazuje „Dziękujemy, wiadomość wysłana”, a do skrzynki nic nie dochodzi, to w 9 przypadkach na 10 winna jest poczta, a nie sam formularz. WordPress domyślnie wysyła maile funkcją PHP prosto z serwera, bez logowania do skrzynki, więc Gmail, Outlook i spółka traktują je jak list bez nadawcy i wyrzucają do spamu albo odrzucają po cichu. Naprawa to zwykle trzy kroki: wysyłka przez SMTP z prawdziwej skrzynki w Twojej domenie, poprawne pole „Od” oraz rekordy SPF, DKIM i DMARC w DNS. Do tego test i log wysyłek, żeby problem nie wrócił niezauważony.
James M. Cain twierdził, że listonosz zawsze dzwoni dwa razy. Formularz kontaktowy na WordPressie potrafi nie zadzwonić ani razu i jeszcze uprzejmie podziękować klientowi za wiadomość. Klient czeka na odpowiedź, Ty czekasz na klientów, a mail leży w folderze spam albo w ogóle nie wyszedł z serwera. Trochę jak w „Nikt nie pisze do pułkownika” Márqueza: pułkownik co piątek chodzi na pocztę, a listu jak nie było, tak nie ma. Tyle że u Márqueza to literatura, a u Ciebie to realne zapytania o wycenę.
Od 2013 roku buduję i naprawiam strony na WordPressie i „formularz nie działa” to jedno z najczęstszych zgłoszeń, jakie dostaję. Najgorsze w tym problemie jest to, że on nie boli. Strona działa, formularz się wysyła, nikt nie widzi czerwonego komunikatu. Właściciel orientuje się po kilku tygodniach, że „jakoś cicho”, albo gdy klient dzwoni z pretensjami, że pisał trzy razy. W tym wpisie wyjaśniam, dlaczego tak się dzieje, jak to sprawdzić w 10 minut i jak naprawić tak, żeby było po sprawie.
Dlaczego formularz „wysyła”, a mail nie dochodzi?
Komunikat „wiadomość wysłana” oznacza tylko tyle, że wtyczka formularza przekazała treść do WordPressa, a WordPress do serwera. To jak wrzucenie listu do skrzynki pocztowej. Nikt Ci nie gwarantuje, że listonosz go zabierze, a adresat otworzy.
WordPress wysyła maile funkcją wp_mail(), która domyślnie korzysta z funkcji mail() w PHP[1]. W praktyce oznacza to, że wiadomość wychodzi bezpośrednio z serwera hostingu, bez logowania do żadnej skrzynki pocztowej. Serwer wpisuje w pole nadawcy to, co mu każesz, np. kontakt@twojafirma.pl, ale nie ma żadnego dowodu, że ma prawo w imieniu tej domeny pisać.
Dla dużych dostawców poczty taki list wygląda jak paczka bez nadawcy, z której tyka. Google od lutego 2024 roku wymaga, żeby każdy nadawca wysyłający na konta Gmail miał skonfigurowane co najmniej SPF lub DKIM, a nadawcy masowi wszystkie trzy mechanizmy: SPF, DKIM i DMARC[2]. Mail z formularza, który ich nie przechodzi, ląduje w spamie albo jest odrzucany. Microsoft wprowadził podobne zasady dla Outlooka w 2025 roku. Wniosek jest prosty: domyślna wysyłka WordPressa w 2026 roku to loteria.
Najczęstsze przyczyny w praktyce
Z moich napraw wychodzi taka lista, mniej więcej w kolejności częstotliwości:
- Brak SMTP. Strona wysyła przez mail() z serwera, a poczta odbiorcy nie ufa takim wiadomościom.
- Złe pole „Od” (From). Formularz wysyła maila „od” adresu klienta, np. jan.kowalski@gmail.com. Twój serwer nie ma prawa wysyłać w imieniu Gmaila, więc Gmail taki list odrzuca. To klasyk, szczególnie w starszych konfiguracjach Contact Form 7.
- Brak lub błędny rekord SPF, brak DKIM i DMARC w DNS domeny.
- Poczta firmowa w Google Workspace lub Microsoft 365, a strona na innym hostingu. Serwer strony próbuje doręczyć list „lokalnie”, bo myśli, że skrzynka jest u niego, i list zostaje na hostingu, którego nikt nie czyta.
- Literówka w adresie odbiorcy w ustawieniach formularza. Brzmi głupio, zdarza się zaskakująco często, zwłaszcza po zmianie adresu firmowego.
- Hosting blokuje lub limituje funkcję mail(), np. po wcześniejszym spamowaniu z tego serwera.
- Konflikt wtyczek lub błąd JavaScript, przez który formularz w ogóle nie wysyła danych. Rzadziej, ale wtedy przynajmniej widać kręcące się kółko.
- Strona była zhakowana i serwer wysyłał spam, więc trafił na czarne listy. Wtedy nawet poprawne maile z formularza mają pod górkę. O tym, jak rozpoznać takie włamanie, piszę w tekście o objawach zhakowanej strony.
Jak sprawdzić, czy formularz działa? Test w 10 minut
Zanim cokolwiek zmienisz, zrób rozpoznanie. Detektyw Columbo zawsze miał „jeszcze tylko jedno pytanie” i to podejście sprawdza się tu idealnie.
- Wyślij formularz sam, z prywatnego adresu na Gmailu, najlepiej z telefonu i bez logowania do WordPressa.
- Sprawdź skrzynkę docelową, folder spam i kwarantannę (w Microsoft 365 wiadomości potrafią utknąć w kwarantannie, której nikt nie przegląda).
- Sprawdź, czy klient dostał autoodpowiedź, jeśli formularz ją wysyła. Jeśli autoodpowiedź doszła, a do Ciebie nic nie dotarło, problem dotyczy adresu odbiorcy albo poczty po Twojej stronie.
- Otwórz nagłówki wiadomości, która doszła (w Gmailu: trzy kropki i „Pokaż oryginał”). Zobaczysz tam wynik SPF, DKIM i DMARC. Wszystko poza „PASS” to trop.
- Wejdź w ustawienia formularza i sprawdź adres odbiorcy oraz pole „Od”. Contact Form 7 ma wbudowany walidator konfiguracji, który ostrzega, gdy pole nadawcy jest ustawione niezgodnie z domeną strony[3].
Jeśli po tym teście list nie dotarł nigdzie, a formularz pokazał sukces, masz praktycznie pewność, że problem jest w wysyłce poczty, a nie w samym formularzu.
Naprawa krok po kroku
Wysyłka przez SMTP zamiast funkcji mail()
To najważniejsza zmiana. Zamiast „wrzucać list do skrzynki bez nadawcy”, WordPress loguje się do prawdziwej skrzynki pocztowej, np. formularz@twojafirma.pl, i wysyła z niej tak, jakbyś wysyłał z programu pocztowego. Robi się to wtyczką, np. WP Mail SMTP, FluentSMTP albo Post SMTP. Do wyboru masz:
- SMTP Twojego hostingu, czyli skrzynka założona w panelu, w którym masz domenę i pocztę,
- Google Workspace albo Microsoft 365, jeśli tam masz pocztę firmową (połączenie przez API lub OAuth jest pewniejsze niż hasło),
- usługi transakcyjne typu Brevo, Mailgun czy Amazon SES, przydatne przy sklepach, które wysyłają dużo maili o zamówieniach.
Dla zwykłej strony firmowej wystarczy pierwsza lub druga opcja. Wtyczki SMTP mają funkcję wysłania maila testowego i to jest pierwszy test, jaki robię po konfiguracji.
Poprawne pole „Od” i „Odpowiedz do”
Złota zasada: pole „Od” zawsze z Twojej domeny, czyli tej samej skrzynki, przez którą idzie SMTP. Adres klienta wpisany w formularzu trafia do pola „Odpowiedz do” (Reply-To). Dzięki temu klikasz w poczcie „Odpowiedz” i piszesz prosto do klienta, a list przechodzi wszystkie kontrole. Taką konfigurację zaleca też dokumentacja Contact Form 7[3].
SPF, DKIM i DMARC w DNS
To trzy rekordy w strefie DNS domeny, które działają jak pieczątka i podpis na liście:
- SPF mówi, które serwery mogą wysyłać pocztę w imieniu domeny. Uwaga: w domenie może być tylko jeden rekord SPF. Dwa rekordy to częsty błąd, po którym oba przestają działać.
- DKIM to cyfrowy podpis każdej wiadomości. Klucz generujesz w panelu poczty i wklejasz do DNS.
- DMARC mówi odbiorcom, co robić z listami, które nie przeszły SPF i DKIM, i wysyła Ci raporty. Na start wystarczy łagodna polityka p=none, która niczego nie blokuje, a tylko raportuje.
Jeśli Twoja domena i hosting to dwie różne firmy, rekordy ustawia się tam, gdzie są serwery DNS domeny. Jak to wszystko się ze sobą łączy, opisałem w tekście o tym, jak wybrać domenę i hosting dla firmy.
Log wysyłek i kopia zgłoszeń w bazie
„Ufaj, ale sprawdzaj”, jak mawiał Reagan, cytując rosyjskie przysłowie. Po naprawie włączam dwie rzeczy:
- log wysłanych maili (mają go wtyczki SMTP), żeby widzieć, co wyszło i czy serwer pocztowy przyjął wiadomość,
- zapis zgłoszeń z formularza w bazie WordPressa (np. Flamingo dla Contact Form 7, w wielu innych wtyczkach formularzy to opcja wbudowana). Nawet jeśli poczta kiedyś znowu się wyłoży, żadne zapytanie nie przepadnie.
Pamiętaj tylko, że zgłoszenia w bazie to dane osobowe. Dopisz to do polityki prywatności i nie trzymaj ich latami bez potrzeby. Więcej o tym w tekście o wymogach prawnych strony firmowej.
Spam z formularza, czyli problem odwrotny
Bywa też tak, że wiadomości dochodzą, tylko że dziewięć na dziesięć to oferty kredytów, kryptowalut i „pozycjonowania za 99 zł”. Odruch „wyłączę formularz, zostawię sam telefon” jest zrozumiały, ale kosztuje klientów, którzy wolą pisać niż dzwonić. Lepiej dodać ochronę antyspamową: Cloudflare Turnstile albo reCAPTCHA, pole-pułapkę (honeypot) i limit wysyłek z jednego adresu IP. Po takim zabiegu spam zwykle spada niemal do zera, a prawdziwi klienci nie muszą klikać w sygnalizację świetlną na obrazkach.
Jeśli z kolei Twoja strona sama wysyła spam do obcych ludzi, a Ty o tym nie wiesz, to już nie jest problem formularza, tylko bezpieczeństwa. Zobacz, jak zabezpieczyć stronę WordPress przed włamaniem.
Jak nie dopuścić, żeby to wróciło?
Poczta lubi się psuć po cichu: po zmianie hasła do skrzynki, po przeprowadzce poczty do Microsoft 365, po aktualizacji wtyczki albo po przeniesieniu strony na inny hosting. Dlatego:
- raz w miesiącu wyślij formularz testowo, najlepiej ustaw sobie przypomnienie w kalendarzu,
- po każdej zmianie poczty, DNS albo hostingu zrób test od razu, nie „przy okazji”,
- zapisz w jednym miejscu, gdzie jest skonfigurowany SMTP i do jakiej skrzynki należy hasło,
- jeśli strona ma stałą opiekę, test formularzy powinien być w jej standardzie.
Ciche zepsucie formularza to też jeden z powodów, dla których strona „nie generuje zapytań”, choć ruch jest. Szerzej o tym piszę w tekście dlaczego strona nie generuje zapytań.
FAQ - formularz kontaktowy na WordPressie
Dlaczego formularz kontaktowy WordPress nie wysyła maili?
Najczęściej formularz działa, a problem jest w wysyłce poczty. WordPress domyślnie wysyła maile funkcją PHP bez logowania do skrzynki, więc dostawcy poczty odrzucają je lub kierują do spamu. Rozwiązaniem jest wysyłka przez SMTP oraz rekordy SPF, DKIM i DMARC.
Czy wtyczka WP Mail SMTP jest potrzebna?
Potrzebna jest wysyłka przez SMTP, a wtyczka to najprostszy sposób, żeby ją włączyć. WP Mail SMTP jest popularna, ale równie dobrze sprawdzają się FluentSMTP czy Post SMTP. Ważniejsza od wyboru wtyczki jest poprawna konfiguracja skrzynki i DNS.
Jaki adres wpisać w polu „Od” w Contact Form 7?
Adres z domeny Twojej strony, najlepiej tej samej skrzynki, przez którą wysyłasz SMTP, np. formularz@twojafirma.pl. Adres klienta wpisz w nagłówek „Reply-To”, żeby móc mu odpowiedzieć jednym kliknięciem.
Dlaczego wiadomości z formularza trafiają do spamu?
Zwykle dlatego, że domena nie ma poprawnych rekordów SPF, DKIM i DMARC albo mail wychodzi z serwera, który nie jest wskazany w SPF. Czasem winny jest też adres IP serwera wpisany na czarną listę po wcześniejszym spamie.
Jak sprawdzić, czy formularz na stronie działa?
Wyślij formularz z prywatnego adresu, sprawdź skrzynkę docelową, spam i kwarantannę, a w nagłówkach wiadomości wynik SPF, DKIM i DMARC. Rób taki test regularnie i zawsze po zmianach poczty, DNS lub hostingu.
Formularz milczy? Naprawię to
Jeśli podejrzewasz, że zapytania z Twojej strony giną gdzieś po drodze, sprawdzę wysyłkę, skonfiguruję SMTP, ustawię SPF, DKIM i DMARC i dodam zapis zgłoszeń w bazie, żeby nic już nie przepadło. Takie prace robię w ramach naprawy stron, a stały monitoring w ramach administracji stronami. Zadzwoń: +48 606 719 343 albo napisz: lukasz@freelancerka.com. Obiecuję, że odpiszę, bo moja poczta działa.
Przypisy i źródła
Wszystkie źródła zweryfikowane; dostęp: 26 października 2026.
- WordPress Developer Resources, „wp_mail()” - developer.wordpress.org
- Pomoc Gmaila, „Wskazówki dla nadawców e-maili” - support.google.com
- Contact Form 7, „Best practice to set up mail” - contactform7.com




