WordPress nie wysyła maili: formularz kontaktowy i zamówienia WooCommerce bez powiadomień – jak to naprawić
- Typowe objawy
- Brak wiadomości z formularza, klienci bez potwierdzeń zamówień, nie działa reset hasła
- Najczęstsza przyczyna
- Wysyłka przez funkcję mail() serwera bez poprawnej konfiguracji poczty i uwierzytelnienia domeny
- Czas naprawy
- Diagnoza: 30 minut. Wysyłka przez SMTP: godzina. Rekordy DNS: od godziny do doby
- Czy zrobisz to sam?
- Diagnozę tak. SMTP i DNS tak, jeśli masz dostęp do skrzynki i panelu domeny
Szybka odpowiedź
WordPress domyślnie wysyła maile funkcją PHP mail(), czyli przez serwer strony. Jeśli serwer nie ma skonfigurowanej poczty, hosting ją ogranicza albo domena nie ma SPF i DKIM, maile nie wychodzą wcale albo trafiają do spamu. Najpierw ustal, który to przypadek (test resetu hasła, log maili WooCommerce, nagłówki w Gmailu). Trwała naprawa to wysyłka przez SMTP lub API skrzynki w Twojej domenie, adres nadawcy w tej samej domenie i poprawne rekordy SPF, DKIM i DMARC.
Mail, który nie doszedł, to problem cichy. Strona działa, zamówienia wpadają, a dopiero po tygodniu klient dzwoni, że nie dostał potwierdzenia, albo okazuje się, że zapytania z formularza od miesiąca trafiały donikąd. W sklepie to jeszcze zgubione powiadomienia o nowych zamówieniach dla Ciebie.
Ten poradnik prowadzi przez diagnozę w trzech krokach i trwałą naprawę. Przykłady pochodzą z testowej instalacji, której serwer celowo nie ma skonfigurowanej poczty, więc pokazują prawdziwe komunikaty błędów. Stan na początek listopada 2026, WordPress 7.1, WooCommerce 11.2.
Jak WordPress wysyła maile i gdzie to się psuje
Każdy mail z WordPressa, z formularza, z WooCommerce czy o resecie hasła, przechodzi przez funkcję wp_mail(). Według dokumentacji WordPressa korzysta ona z biblioteki PHPMailer, która domyślnie przekazuje wiadomość funkcji mail() w PHP, a ta programowi pocztowemu serwera. Dokumentacja zaznacza też ważną rzecz: to, że wp_mail() zwróciła sukces, nie znaczy, że mail dotarł do odbiorcy. Znaczy tylko, że serwer przyjął go do wysłania.
Jeśli nie ustawisz nadawcy, WordPress wysyła z adresu wordpress@ i nazwy Twojej domeny. Taka skrzynka zwykle nie istnieje, a serwer hostingu nie jest wpisany w rekordy domeny jako uprawniony nadawca. Dla Gmaila czy Outlooka to wygląda jak podszywanie się.
Diagnoza w trzech krokach
Zanim cokolwiek zmienisz, ustal, gdzie mail ginie. Są trzy możliwości i każda ma inne lekarstwo.
Krok 1: czy WordPress w ogóle wysyła
Najprostszy test daje sam WordPress. Wyloguj się, otwórz stronę logowania (/wp-login.php), kliknij link Nie pamiętasz hasła? (w wersji angielskiej Lost your password?) i wpisz swój login. Prośba o reset niczego nie zmienia, dopóki nie klikniesz linku z maila. Jeśli serwer nie może wysłać wiadomości, WordPress powie to wprost:

Brak błędu i komunikat, że link wysłano, oznacza, że serwer przyjął maila. Czy go doręczył, sprawdzisz w kroku 3.
W sklepie masz drugie, dokładniejsze źródło. Od wersji 10.9 WooCommerce zapisuje los każdego maila transakcyjnego. Wejdź w WooCommerce → Status → Dziennik zdarzeń (Logs) i otwórz plik z nazwą zaczynającą się od transactional-emails. Każdy wpis ma status: wysłany, nieudany, wyłączony albo pominięty. Wysłane i nieudane maile trafiają też do notatek przy zamówieniu.

Jeśli masz terminal, możesz wywołać wp_mail() bezpośrednio przez WP-CLI. Polecenie wysyła jeden testowy mail i wypisuje błąd, jeśli się nie udało. Tak wygląda prawdziwy wynik z testowej instalacji (adres odbiorcy zmień na swój):
$ wp eval 'add_action("wp_mail_failed", function($e){ echo $e->get_error_message(), "\n"; });
var_dump( wp_mail( "test@example.com", "Test", "Test" ) );'
sh: 1: /usr/sbin/sendmail: not found
Could not instantiate mail function.
bool(false)
Pierwsza linia mówi wszystko: na serwerze nie ma programu sendmail, którego PHP używa do wysyłki. Na hostingu współdzielonym taki program zwykle jest, ale hosting może wyłączyć funkcję mail() albo ograniczyć liczbę wiadomości na godzinę. Na własnym serwerze VPS pocztę musisz skonfigurować sam, co jest częstą niespodzianką po przeprowadzce strony.
Dla maili spoza WooCommerce (formularze, reset hasła) WooCommerce sam podpowiada na ekranie ustawień maili wtyczkę do logowania maili. Możesz ją zainstalować na czas diagnozy.
Krok 2: czy winny jest formularz
Jeśli reset hasła działa i maile ze sklepu dochodzą, a milczy tylko formularz kontaktowy, problem leży w jego ustawieniach. W ustawieniach wiadomości formularza sprawdź:
- Adres odbiorcy. Literówka albo stary adres pracownika to częsta przyczyna. Sprawdź też, czy wtyczka nie ma osobnego adresu dla każdego formularza.
- Pole nadawcy (Od, From). Nie wpisuj tam adresu klienta z formularza. Mail „od klienta@gmail.com” wysłany z Twojego serwera nie przejdzie DMARC Gmaila. Nadawcą ma być adres w Twojej domenie, a adres klienta wstaw w polu odpowiedzi (Reply-To). Wtedy „Odpowiedz” w programie pocztowym trafi do klienta.
- Komunikat po wysłaniu. Jeśli formularz pokazuje błąd albo kręci się bez końca, sprawdź konsolę przeglądarki i ochronę przed spamem (CAPTCHA, zapora), bo zapytanie może nie docierać do serwera.
Krok 3: czy mail ląduje w spamie
Wyślij test (reset hasła, formularz, testowe zamówienie) na prywatny adres w Gmailu. Jeśli mail jest w spamie albo w ogóle go nie ma, otwórz go (o ile dotarł) i w menu wybierz „Pokaż oryginał” (instrukcja Google). Na górze zobaczysz wyniki SPF, DKIM i DMARC. Przy wysyłce przez mail() z serwera hostingu często widać tam brak podpisu DKIM i wynik SPF inny niż pass.
Jeśli maila nie ma nigdzie, a log pokazuje „wysłany”, mógł zostać odrzucony po drodze. Zapytaj hosting o logi serwera pocztowego: odrzucenia z kodem błędu mówią, czego brakuje.
Trwała naprawa: SMTP lub API
SMTP to standardowy sposób przekazania maila do serwera pocztowego, z loginem i hasłem, tak jak robi to program pocztowy na Twoim komputerze. API to to samo przez interfejs usługi, z kluczem zamiast hasła. W obu przypadkach Twoją pocztę wysyła prawdziwy serwer pocztowy, który ma reputację, podpisuje maile i jest wpisany w rekordy domeny. Sam WooCommerce na ekranie Ustawienia → E-maile zaleca podłączenie adresu w domenie sklepu i osobny serwer SMTP.
-
Wybierz, przez co wysyłasz
Przy kilkudziesięciu mailach dziennie wystarczy skrzynka w domenie firmy, u hostingu albo w Google Workspace lub Microsoft 365. Sklep z dużym ruchem lepiej obsłuży usługa do maili transakcyjnych. Newsletter wysyłaj osobną usługą, żeby jego reputacja nie wpływała na potwierdzenia zamówień.
-
Zainstaluj wtyczkę SMTP
Wtyczka SMTP z katalogu wordpress.org przestawia PHPMailer z funkcji
mail()na wybrany serwer. Wpisz w niej serwer, port i dane logowania od dostawcy poczty, albo połącz ją przez API. Jeśli dostawca na to pozwala, użyj hasła aplikacji lub klucza API zamiast głównego hasła do skrzynki. -
Ustaw adres nadawcy w swojej domenie
W WooCommerce → Ustawienia → E-maile, w sekcji Opcje nadawcy wiadomości e-maili, pole Adres e-mail "od" (w wersji angielskiej Email sender options, "From" address) musi być adresem w domenie sklepu, najlepiej tą samą skrzynką, przez którą wysyłasz. WooCommerce w dokumentacji ostrzega przed adresami Gmaila czy Yahoo w tym polu. To samo ustaw we wtyczce SMTP, w formularzach i sprawdź adres administratora w Ustawienia → Ogólne (tam trafiają maile systemowe WordPressa).

-
Uzupełnij SPF, DKIM i DMARC
To trzy rekordy w DNS domeny, po których skrzynki odbiorców poznają, że mail naprawdę pochodzi od Ciebie. SPF wymienia serwery uprawnione do wysyłki z Twojej domeny (musi być jeden rekord, z wpisem dostawcy, przez którego wysyłasz). DKIM to cyfrowy podpis maila, który włączasz u dostawcy poczty i publikujesz w DNS. DMARC mówi, co zrobić z mailem, który nie przeszedł testów; zacznij od łagodnej polityki
p=nonez raportami. -
Przetestuj każdą drogę osobno
Reset hasła, formularz, testowe zamówienie z płatnością przy odbiorze lub przelewem, mail do klienta i do Ciebie. Każdy sprawdź w Gmailu przez „Pokaż oryginał”: oczekujesz
spf=pass,dkim=passidmarc=pass.
Od lutego 2024 Gmail i Yahoo wymagają od wszystkich nadawców co najmniej SPF lub DKIM, a od wysyłających ponad 5000 maili dziennie także DMARC. Outlook.com od 5 maja 2025 stosuje podobne wymagania wobec dużych nadawców. Mały sklep nie jest dużym nadawcą, ale nieuwierzytelniona poczta i tak ma coraz gorzej. Aktualne zasady Google opisuje strona wytycznych dla nadawców.
Dane logowania wtyczek SMTP leżą w bazie WordPressa. W czerwcu 2026 złośliwy kod w zainfekowanych wtyczkach ShapedPlugin kradł je celowo (opisuję to w poradniku o zainfekowanych aktualizacjach). Używaj osobnej skrzynki lub klucza tylko do wysyłki ze strony, nie głównego konta firmowego, i zmień dane po każdym podejrzeniu włamania.
Dla dewelopera: błędy wysyłki da się zapisywać w logu PHP. Wystarczy mała wtyczka must-use z akcją wp_mail_failed, którą WordPress wywołuje przy każdym nieudanym mailu:
<?php
// plik: wp-content/mu-plugins/log-mail-errors.php
add_action( 'wp_mail_failed', function ( $error ) {
error_log( 'wp_mail_failed: ' . $error->get_error_message() );
} );
Test przed Black Friday
Black Friday w 2026 roku to 27 listopada. Przy kilkukrotnie większej liczbie zamówień niedziałające maile oznaczają telefony, podwójne zamówienia i zwroty. Kilka dni wcześniej:
- złóż testowe zamówienie na adres w Gmailu i w polskiej darmowej poczcie i sprawdź, czy potwierdzenie trafiło do skrzynki odbiorczej,
- sprawdź w WooCommerce → Ustawienia → E-maile, czy włączone są potrzebne maile (np. Nowe zamówienie do Ciebie, Zamówienie w trakcie realizacji do klienta) i czy mają właściwych odbiorców,
- przejrzyj log
transactional-emailsz ostatnich dni pod kątem wpisów Warning, - zapytaj dostawcę poczty lub hosting o godzinny i dobowy limit wysyłki i porównaj go z liczbą zamówień w szczycie,
- nie wysyłaj newslettera tą samą skrzynką co potwierdzenia zamówień.
Pozostałe przygotowania opisuję w liście kontrolnej sklepu na Black Friday. Jeśli w logu widzisz setki maili „Failed order” do przypadkowych adresów, to może być atak opisany w poradniku o card testingu.
Sklep przenosi się z hostingu współdzielonego na własny serwer VPS. Strona działa szybciej, zamówienia wpadają, ale po tygodniu kilku klientów pyta o potwierdzenia. Test resetu hasła kończy się komunikatem The email could not be sent: nowy serwer nie ma skonfigurowanej poczty. W logu WooCommerce widać dziesiątki nieudanych maili. Po podłączeniu wtyczki SMTP do skrzynki w domenie sklepu, dopisaniu dostawcy do SPF i włączeniu DKIM testowe maile dochodzą do Gmaila z wynikiem pass. Klientom z tego tygodnia potwierdzenia zostają wysłane ręcznie z ekranu zamówienia.
Kiedy nie robić tego samemu
Test resetu hasła i przegląd logu zrobisz sam. Pomoc przyda się, gdy:
- nie masz dostępu do panelu DNS domeny albo nie wiesz, kto nim zarządza,
- rekord SPF już istnieje i obejmuje kilka usług, a boisz się, że zmiana zepsuje firmową pocztę,
- po wdrożeniu SMTP maile nadal trafiają do spamu,
- strona stoi na VPS bez skonfigurowanej poczty,
- serwer wysyła maile, których Ty nie wysyłasz (to może być objaw włamania, zobacz jak sprawdzić, czy strona została zhakowana).
Maile nie dochodzą, a za tydzień promocja?
Zdiagnozuję, gdzie giną maile, podłączę wysyłkę przez SMTP lub API, ustawię adresy nadawcy oraz SPF, DKIM i DMARC i przetestuję każdą drogę: formularze, reset hasła, zamówienia. Szybka Interwencja: 299 zł netto, 7 dni gwarancji na naprawę.
Najczęstsze pytania
Dlaczego WordPress nie wysyła maili, skoro wcześniej działało?
Najczęściej coś zmieniło się po stronie serwera albo skrzynek odbiorców: przeprowadzka na inny hosting lub serwer bez skonfigurowanej poczty, wyłączenie funkcji mail() przez hosting, limit wysyłki, zmiana rekordów DNS domeny albo zaostrzenie zasad Gmaila i Outlooka wobec nieuwierzytelnionej poczty.
Czy wtyczka SMTP rozwiązuje problem na stałe?
Zwykle tak, pod warunkiem że wysyłasz przez skrzynkę lub usługę w swojej domenie, adres nadawcy jest w tej domenie, a domena ma poprawne SPF, DKIM i DMARC. Sama wtyczka bez tych elementów przenosi problem w inne miejsce.
Mogę wysyłać maile ze sklepu przez darmowe konto Gmail?
Technicznie się da, ale to zły pomysł dla sklepu. Adres nadawcy nie jest w domenie sklepu, darmowe konta mają limity wysyłki, a do konfiguracji trzeba hasła aplikacji lub dostępu do konta prywatnego. Lepsza jest skrzynka w domenie sklepu albo usługa do maili transakcyjnych.
Klient twierdzi, że nie dostał potwierdzenia zamówienia. Jak to sprawdzić?
Otwórz zamówienie i przejrzyj notatki: WooCommerce zapisuje tam wysłane i nieudane maile. Szczegóły znajdziesz w WooCommerce → Status → Dziennik zdarzeń, w logu transactional-emails. Jeśli mail wyszedł, poproś klienta o sprawdzenie spamu i zakładek, a przy wysyłce przez SMTP sprawdź też log dostawcy.
Czy mail o resecie hasła do testu jest bezpieczny?
Tak. Prośba o reset nie zmienia hasła. WordPress wysyła tylko link, a hasło zmienia się dopiero po jego kliknięciu i ustawieniu nowego. Jeśli link przyjdzie, a nie chcesz zmieniać hasła, po prostu go zignoruj.