Skip to content

Wysyłka maili w WordPress

WordPress wysyła wiadomości e-mail przy wielu okazjach: powiadomienie o nowym komentarzu, link do resetu hasła, potwierdzenie zamówienia w WooCommerce, powiadomienie o nowym użytkowniku. Domyślnie robi to przez funkcję PHP mail(), która na współdzielonym hostingu często kończy się tym, że wiadomość trafia do spamu albo nie dociera w ogóle.

Czas wdrożenia: 15–30 minut (metoda wtyczkowa), ok. 10 minut (metoda ręczna).

Dlaczego mail() zawodzi

Funkcja mail() przekazuje wiadomość bezpośrednio do lokalnego serwera pocztowego na maszynie hostingowej. Serwer wysyła ją dalej — bez uwierzytelnienia, w imieniu domeny, której właściwie nie „obsługuje". Z perspektywy serwerów pocztowych odbiorcy wygląda to podejrzanie.

Konkretne problemy:

  • Reputacja IP — serwer współdzielony wysyła pocztę od dziesiątek klientów. Jeden klient spamuje, cierpi cała pula adresów IP. Twoje wiadomości mogą być odrzucane za grzechy sąsiadów.
  • Niezgodność SPF — rekord SPF twojej domeny wskazuje zazwyczaj na dedykowany serwer pocztowy, nie na serwer www. Wiadomość wysłana przez mail() pochodzi z innego IP, więc SPF nie przechodzi.
  • Brak DKIMmail() nie podpisuje wiadomości kluczem DKIM. Nowoczesne filtry antyspamowe (Gmail, Outlook) traktują to jako sygnał ostrzegawczy.
  • Brak uwierzytelnieniamail() nie loguje się nigdzie. Serwery odbiorcze nie mają pewności, kto faktycznie wysyła wiadomość.

Efekt praktyczny: link do resetu hasła ląduje w spamie, potwierdzenie zamówienia nie dochodzi do klienta, powiadomienia administracyjne znikają bez śladu.

SMTP jako właściwe rozwiązanie

SMTP, czyli Simple Mail Transfer Protocol, to protokół wysyłania poczty z uwierzytelnieniem. WordPress łączy się z serwerem pocztowym, loguje się danymi konta e-mail i zleca wysyłkę. Serwer pocztowy wysyła wiadomość w normalny sposób — z właściwym IP, z podpisem DKIM, z rekordem SPF, który się zgadza.

mail()SMTP
Uwierzytelnieniebraklogin + hasło
SPFzazwyczaj nie przechodziprzechodzi
DKIMbrakpodpisywane przez serwer pocztowy
Reputacja IPwspólna pula serwera wwwIP dedykowanego serwera pocztowego
Wiadomości w spamieczęsterzadkie

💡 Jakie konto SMTP wybrać?

Dla stron z małym ruchem pocztowym (kilka–kilkanaście maili dziennie) wystarczy konto e-mail na własnej domenie w hostingu Joton. Dla WooCommerce i sklepów wysyłających dziesiątki maili dziennie warto rozważyć zewnętrzny serwis transakcyjny (Brevo, Mailgun, Postmark) — mają dedykowane IP i lepsze narzędzia do monitorowania dostarczalności.

Metoda 1: Wtyczka WP Mail SMTP (dla początkujących)

To najszybsza metoda — nie wymaga pisania kodu. WP Mail SMTP to jedna z najpopularniejszych wtyczek do tego zadania (ponad 3 miliony instalacji), aktywnie rozwijana.

Instalacja

  1. Zaloguj się do panelu administracyjnego WordPress (/wp-admin)
  2. Przejdź do Wtyczki → Dodaj nową
  3. W polu wyszukiwania wpisz WP Mail SMTP
  4. Kliknij Zainstaluj teraz obok wtyczki autorstwa WPForms
  5. Po instalacji kliknij Aktywuj

Konfiguracja — konto e-mail na hostingu Joton

To najprostsze ustawienie: używasz adresu e-mail skonfigurowanego w panelu Joton jako nadawcy.

  1. Przejdź do WP Mail SMTP → Ustawienia
  2. W sekcji Od (e-mail) wpisz adres nadawcy (np. [email protected])
  3. W sekcji Od (nazwa) wpisz nazwę wyświetlaną (np. Twoja Firma)
  4. Zaznacz opcję Wymuś e-mail od i Wymuś nazwę od — WordPress nie nadpisze tych wartości
  5. W sekcji Mailer wybierz Inne SMTP
  6. Uzupełnij dane serwera pocztowego:
PoleWartość
Host SMTPmail.twojadomena.pl
SzyfrowanieTLS
Port587
Uwierzytelnieniewłączone
Nazwa użytkownikapełny adres e-mail, np. [email protected]
Hasłohasło do skrzynki pocztowej

💡 Gdzie znaleźć dane SMTP w panelu Joton?

Przejdź do Skrzynki e-mail w panelu Joton i kliknij nazwę skrzynki. Dane serwera SMTP (host, port) są widoczne w ustawieniach konta. Adres hosta to zazwyczaj mail.TWOJADOMENA.PL.

  1. Kliknij Zapisz ustawienia

Konfiguracja — Gmail z hasłem aplikacji

Gmail wymaga hasła aplikacji — zwykłe hasło do konta Google nie zadziała (Google blokuje logowanie z aplikacji zewnętrznych).

  1. Zaloguj się do konta Google → Zarządzaj kontem Google → Bezpieczeństwo
  2. Włącz Weryfikację dwuetapową (wymagana do haseł aplikacji)
  3. W sekcji bezpieczeństwa kliknij Hasła aplikacji
  4. Wybierz aplikację: Inna (nazwa własna), wpisz np. WordPress
  5. Skopiuj wygenerowane 16-znakowe hasło

W WP Mail SMTP:

  • Host SMTP: smtp.gmail.com
  • Szyfrowanie: TLS
  • Port: 587
  • Nazwa użytkownika: twój adres Gmail
  • Hasło: skopiowane hasło aplikacji (16 znaków, bez spacji)

⚠️ Limit wysyłki Gmail

Gmail przez SMTP pozwala wysłać maksymalnie 500 wiadomości dziennie. Jeżeli prowadzisz sklep WooCommerce lub listy mailingowe, to za mało — użyj konta pocztowego na hostingu lub serwisu transakcyjnego.

Test wysyłki

  1. Przejdź do WP Mail SMTP → Narzędzia → Test e-mail
  2. Wpisz swój adres e-mail jako odbiorcę
  3. Kliknij Wyślij e-mail
  4. Sprawdź skrzynkę — wiadomość powinna dojść w ciągu kilku sekund

Jeżeli test się nie powiedzie, wtyczka wyświetli szczegółowy komunikat błędu — najczęściej błędne hasło lub zablokowany port.

Metoda 2: Konfiguracja ręczna przez functions.php (dla zaawansowanych)

Ta metoda nie wymaga wtyczki. WordPress używa biblioteki PHPMailer do wysyłki e-mail i udostępnia hak phpmailer_init, który pozwala podmienić konfigurację przed każdą wysyłką.

⚠️ Zmiany w functions.php

Kod dodawany do functions.php motywu zostanie utracony przy aktualizacji motywu nadrzędnego. Używaj motywu potomnego (child theme) albo utwórz własną wtyczkę mu-plugins — patrz wskazówka poniżej.

Konfiguracja przez functions.php

Otwórz plik functions.php swojego motywu (lub motywu potomnego) i dodaj na końcu:

php
add_action('phpmailer_init', function(PHPMailer\PHPMailer\PHPMailer $phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host       = 'mail.twojadomena.pl';
    $phpmailer->SMTPAuth   = true;
    $phpmailer->Port       = 587;
    $phpmailer->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
    $phpmailer->Username   = '[email protected]';
    $phpmailer->Password   = 'twoje_haslo_smtp';
    $phpmailer->From       = '[email protected]';
    $phpmailer->FromName   = 'Twoja Firma';
});

Podmień wartości:

  • mail.twojadomena.pl — host SMTP twojego serwera pocztowego
  • [email protected] — adres e-mail skrzynki nadawczej
  • twoje_haslo_smtp — hasło do skrzynki pocztowej
  • Twoja Firma — nazwa wyświetlana jako nadawca

⚠️ Hasło w kodzie źródłowym

Hasło w pliku PHP jest przechowywane w czystym tekście. Jeżeli repozytorium git jest publiczne lub masz wątpliwości co do bezpieczeństwa dostępu do plików, przenieś dane logowania do stałych w wp-config.php zamiast wpisywać je bezpośrednio.

Bezpieczniejsza wersja: dane w wp-config.php

Dodaj stałe w pliku wp-config.php (przed linią /* That's all, stop editing! */):

php
define('SMTP_HOST',     'mail.twojadomena.pl');
define('SMTP_PORT',     587);
define('SMTP_USER',     '[email protected]');
define('SMTP_PASS',     'twoje_haslo_smtp');
define('SMTP_FROM',     '[email protected]');
define('SMTP_NAME',     'Twoja Firma');

Następnie w functions.php użyj stałych zamiast wartości na sztywno:

php
add_action('phpmailer_init', function(PHPMailer\PHPMailer\PHPMailer $phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host       = SMTP_HOST;
    $phpmailer->SMTPAuth   = true;
    $phpmailer->Port       = SMTP_PORT;
    $phpmailer->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
    $phpmailer->Username   = SMTP_USER;
    $phpmailer->Password   = SMTP_PASS;
    $phpmailer->From       = SMTP_FROM;
    $phpmailer->FromName   = SMTP_NAME;
});

wp-config.php jest poza katalogiem motywu — przy aktualizacjach motywu nie zostanie nadpisany.

💡 Alternatywa: mu-plugins

Jeszcze lepszym miejscem niż functions.php jest katalog wp-content/mu-plugins/. Utwórz plik wp-content/mu-plugins/smtp-config.php z powyższym kodem (pamiętaj o otwierającym <?php). Wtyczki w mu-plugins są ładowane automatycznie i nie wymagają aktywacji przez panel — nie da się ich przypadkowo wyłączyć.

Test bez wtyczki

WordPress nie ma wbudowanego testu wysyłki w panelu administracyjnym. Najprostszy sposób to tymczasowa instalacja lekkiej wtyczki Check Email (lub skorzystaj z WP CLI):

bash
wp eval 'wp_mail("[email protected]", "Test SMTP", "Działa!");'

Najczęstsze problemy

Wiadomość testowa nie dochodzi, brak błędu

Sprawdź folder spam u odbiorcy. Jeżeli tam też nie ma — sprawdź czy adres From w konfiguracji SMTP zgadza się z nazwą użytkownika SMTP. Wiele serwerów pocztowych odrzuca wiadomości, gdzie nadawca różni się od zalogowanego konta.

Błąd „SMTP connect() failed"

Przyczyną jest zazwyczaj zablokowany port. Porty 465 i 587 mogą być blokowane przez firewalle hostingowe lub dostawców internetu.

Sprawdź z poziomu SSH czy port jest dostępny:

bash
openssl s_client -connect mail.twojadomena.pl:587 -starttls smtp

Jeżeli połączenie nie wychodzi, spróbuj portu 465 ze szyfrowaniem SSL zamiast 587 z TLS:

php
$phpmailer->Port       = 465;
$phpmailer->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_SMTPS;
Błąd uwierzytelnienia Gmail: „Username and Password not accepted"

Gmail od 2022 roku nie akceptuje zwykłego hasła do konta. Potrzebujesz hasła aplikacji (App Password) — patrz krok 3–5 sekcji konfiguracji Gmail powyżej. Weryfikacja dwuetapowa musi być włączona.

Wiadomości wychodzą, ale trafiają do spamu

Upewnij się, że:

  • Rekord SPF domeny zawiera serwer pocztowy, z którego wysyłasz
  • Skrzynka nadawcza ma skonfigurowany DKIM (w panelu Joton: Skrzynki e-mail → DKIM)
  • Adres From w WordPress odpowiada domenie, z której wysyłasz

Domyślnie WordPress ustawia nadawcę jako [email protected]. Jeżeli taka skrzynka nie istnieje na serwerze pocztowym, wiadomość zostanie odrzucona przez część serwerów. Wtyczka WP Mail SMTP lub hak phpmailer_init pozwalają nadpisać ten adres na istniejącą skrzynkę.

Po aktualizacji motywu SMTP przestało działać

Edytowałeś functions.php motywu nadrzędnego zamiast potomnego. Przenieś kod do motywu potomnego (/wp-content/themes/TWOJ-MOTYW-CHILD/functions.php) albo do pliku mu-plugins — patrz wskazówka w sekcji konfiguracji ręcznej.

Przydatne linki