naprawa-stron.pl Online 24/7 Zgłoś awarię

WordPress nie wysyła maili: formularz kontaktowy i zamówienia WooCommerce bez powiadomień – jak to naprawić

Autor: Grzegorz Wojterzak. Aktualizacja: 20 listopada 2026. Czas czytania: około 12 minut.

$ diagnoza wordpress nie wysyła maili
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ę.

Dwie drogi maila z WordPressa: przez funkcję mail() serwera i przez SMTP Formularz, WooCommerce i reset hasła wywołują wp_mail i PHPMailer. Droga domyślna: funkcja mail() i program pocztowy serwera strony. Może go nie być, hosting może go blokować lub limitować, a serwer zwykle nie jest wpisany w SPF domeny, więc mail ginie lub trafia do spamu. Droga zalecana: SMTP lub API skrzynki albo usługi w Twojej domenie, z podpisem DKIM i wpisem w SPF; skrzynka odbiorcy sprawdza SPF, DKIM i DMARC i przyjmuje mail. Strona formularz, WooCommerce, reset hasła wp_mail() PHPMailer Domyślnie: mail() program pocztowy serwera: może go nie być, hosting blokuje lub limituje, brak wpisu w SPF Zalecane: SMTP lub API skrzynka lub usługa w Twojej domenie, podpis DKIM, wpis w SPF Wynik mail nie wychodzi albo ląduje w spamie lub jest odrzucany Wynik Gmail, Outlook: SPF, DKIM, DMARC pass, skrzynka odbiorcza
Strona i WooCommerce są te same, różni się tylko droga, którą mail opuszcza serwer. Przy wysyłce przez SMTP lub API serwer strony przestaje być nadawcą poczty.

Diagnoza w trzech krokach

Zanim cokolwiek zmienisz, ustal, gdzie mail ginie. Są trzy możliwości i każda ma inne lekarstwo.

Drzewo diagnozy: gdzie ginie mail z WordPressa Pytanie pierwsze: czy nie działają tylko maile z jednego formularza? Tak: sprawdź ustawienia formularza, adres odbiorcy i pole nadawcy. Nie: zrób test resetu hasła. Jeśli pojawia się błąd The email could not be sent, WordPress w ogóle nie wysyła: potrzebna wysyłka przez SMTP lub pomoc hostingu. Jeśli błędu nie ma, sprawdź, czy mail doszedł. Jest w spamie: popraw adres nadawcy, SPF, DKIM i DMARC. Nie ma go nigdzie: sprawdź log, limity hostingu i adres odbiorcy. 1. Nie działa tylko jeden formularz? tak Ustawienia formularza adres odbiorcy, pole nadawcy (Od), komunikaty błędów wtyczki nie 2. Test resetu hasła: czy jest komunikat błędu? tak WordPress w ogóle nie wysyła serwer bez poczty lub mail() zablokowane: SMTP albo hosting nie 3. Gdzie jest testowy mail w Gmailu? spam Uwierzytelnienie: nadawca w domenie, SPF, DKIM, DMARC nigdzie Log maili, limity hostingu, adres odbiorcy, odrzucenia
Trzy pytania wystarczą, żeby wiedzieć, czy naprawiać formularz, serwer, czy reputację domeny. Każde zajmuje kilka minut.

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:

Strona resetowania hasła WordPressa z błędem: nie wysłano wiadomości email, witryna może nie być poprawnie skonfigurowana do wysyłania wiadomości email
Zrzut ekranuPrawdziwy błąd WordPressa po polsku: „Błąd: nie wysłano wiadomości email. Twoja witryna może nie być poprawnie skonfigurowana do wysyłania wiadomości email.” Serwer testowej instalacji nie ma skonfigurowanej poczty, więc funkcja mail() kończy się błędem.

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.

WooCommerce, Dziennik zdarzeń, plik transactional-emails: wpis o niewysłanym mailu dla zamówienia #15 w czerwonej ramce
Zrzut ekranuWooCommerce → Status → Dziennik zdarzeń, plik transactional-emails. Czerwona ramka: mail do klienta o nieudanym zamówieniu #15 nie wyszedł, a WooCommerce zapisał przyczynę „Nie można utworzyć instancji funkcji poczty.”, czyli polskie tłumaczenie Could not instantiate mail function: PHP nie mógł uruchomić programu pocztowego serwera. Testowy sklep na WordPressie 7.1.4 i WooCommerce 11.2.1 po polsku, dane fikcyjne.

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.

  1. 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ń.

  2. 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.

  3. 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).

Ustawienia maili WooCommerce, sekcja Opcje nadawcy wiadomości e-maili: pole Adres e-mail od w czerwonej ramce
Zrzut ekranuSekcja „Opcje nadawcy wiadomości e-maili” w WooCommerce → Ustawienia → E-maile. Czerwona ramka: pole „Adres e-mail "od"”, tu w domenie sklepu (admin@sklep-przyklad.pl). Niżej możesz dodać osobny adres do odpowiedzi. Testowy sklep na WordPressie 7.1.4 i WooCommerce 11.2.1 po polsku, dane fikcyjne.
  1. 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=none z raportami.

  2. 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=pass i dmarc=pass.

Dlaczego to teraz ważniejsze niż kiedyś

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.

Hasło do poczty to też cel ataku

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-emails z 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.

Typowy scenariusz

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.

Grzegorz Wojterzak naprawia strony internetowe po awariach i włamaniach: WordPress, WooCommerce, PHP i Node.js. Od ponad dekady pracuje przy stronach i sklepach internetowych polskich firm.