Dokumentacja
M SMTP
M SMTP zastępuje domyślną wysyłkę WordPressa przez funkcję mail() w PHP: każda wiadomość wysłana przez wp_mail(), czy pochodzi z rdzenia, z WooCommerce, z wtyczki formularza, czy z własnego kodu, wychodzi przez serwer SMTP, który kontrolujesz. Wtyczka zapisuje też każdą wiadomość w lokalnym dzienniku wraz ze statusem doręczenia, pozwala wysłać ją ponownie lub przekazać dalej, opcjonalnie śledzi otwarcia i kliknięcia, kieruje pocztę warunkowo do kilku serwerów SMTP, ogranicza tempo wysyłki i wysyła w tle. Powstała dla administratora pojedynczej witryny lub małej sieci, który chce, żeby doręczalność dało się sprawdzić, a nie tylko założyć.
Instalacja i aktywacja
M SMTP wymaga WordPressa 6.5 lub nowszego i PHP 7.4 lub nowszego. Aktywacja tworzy dwie tabele w bazie, wp_msmtp_emails i wp_msmtp_events (z twoim prefiksem tabel), oraz planuje dwa zdarzenia WP-Cron: msmtp_process_queue co minutę, według własnego interwału zarejestrowanego jako "Every minute (M SMTP)", pierwsze uruchomienie po minucie, i msmtp_purge_logs raz na dobę, pierwsze uruchomienie po 24 godzinach. W trybie multisite aktywacja sieciowa zakłada tabele i cron na każdej istniejącej witrynie, a witryny utworzone później konfigurują się same. Aktualizacje schematu wykonują się na haku init, a nie wyłącznie w wp-admin, więc po aktualizacji wtyczki żadna witryna w sieci nie zostaje ze starą strukturą tabel; opcja msmtp_upgrade_lock nie pozwala równoległym żądaniom wykonać aktualizacji więcej niż raz.
- Wgraj wtyczkę do /wp-content/plugins/m-smtp/ albo zainstaluj plik zip z ekranu Plugins.
- Aktywuj ją. Przez SMTP nic jeszcze nie wychodzi.
- Przejdź do M SMTP, potem Settings, i wpisz dane swojego serwera SMTP.
- Przejdź do M SMTP, potem Tools, i uruchom Test Connection, a następnie Send Test Email.
- Działa od pierwszej minuty: zapisywanie każdej wiadomości z wp_mail() wraz z pełną treścią (Log message body jest domyślnie włączone) i 30-dniowy okres przechowywania.
- Wyłączone, dopóki tego nie zmienisz: śledzenie otwarć i kliknięć, Optimized sending (kolejka w tle), wszystkie limity wysyłki (każdy ustawiony na 0), Force From email, Force From name oraz usuwanie danych przy odinstalowaniu.
- Puste, dopóki nie uzupełnisz: SMTP Host. Dopóki pole hosta jest puste i nic nie trafia do kolejki, M SMTP nie zmienia ustawień PHPMailera, więc WordPress dalej wysyła przez PHP mail(), a wiadomości i tak trafiają do dziennika. Przestaje to obowiązywać w chwili, gdy zostanie przekroczony limit wysyłki albo zaznaczysz Optimized sending: wiadomość idzie wtedy do kolejki, która nie ma przez co jej doręczyć. Opisuje to rozdział 12 i nie bez powodu stoi tam na pierwszym miejscu.
Gdzie znajdziesz ekrany wtyczki
M SMTP dodaje jedną pozycję menu głównego o nazwie M SMTP, z ikoną koperty, umieszczoną poniżej Settings w bocznym pasku kokpitu. Interfejs jest angielski nawet na polskiej witrynie, więc podane niżej nazwy to dokładnie te, które zobaczysz na ekranie. Wszystkie pięć ekranów wymaga uprawnienia manage_options. Na pojedynczej witrynie oznacza to rolę Administrator. W multisite oznacza to Super Admina, ale też każdego Administratora danej podwitryny: WordPress nie odbiera administratorom witryn uprawnienia manage_options w sieci, odbiera im uprawnienia do wtyczek, motywów, użytkowników i aktualizacji rdzenia. Każdy, kto otworzy Email Log, przeczyta zapisane treści wiadomości tej witryny, co ma znaczenie dla ostrzeżenia z rozdziału 5. Programista może zmienić ten wymóg filtrem msmtp_capability. Na każdym ekranie wtyczki, w prawym górnym rogu kokpitu, znajduje się karta Help o nazwie "Background sending": tłumaczy ona zastrzeżenia dotyczące WP-Cron i pokazuje gotowy wiersz crona dla twojej witryny.
- M SMTP, potem Settings: serwer SMTP, adres nadawcy, dziennik, śledzenie, kolejka i limity wysyłki. Fragment adresu msmtp.
- M SMTP, potem Email Log: wszystkie wiadomości ze statusem, wtyczką źródłową i danymi o zaangażowaniu. Fragment adresu msmtp-log.
- M SMTP, potem Reports: liczba wysłanych i nieudanych wiadomości oraz wskaźniki otwarć i kliknięć. Fragment adresu msmtp-reports.
- M SMTP, potem Routing: kreator reguł warunkowych. Fragment adresu msmtp-routing.
- M SMTP, potem Tools: test połączenia, wiadomość testowa, ręczne uruchomienie kolejki i ręczne czyszczenie dziennika. Fragment adresu msmtp-tools.
Settings: Primary SMTP Server
Tego połączenia używa każda wiadomość, o ile reguła routingu nie skieruje jej gdzie indziej. Wartości domyślne: Port 587, Encryption TLS, Auto TLS włączone, Authentication włączone, a Host, Username i Password puste. Przyciski portów (25, 465, 587, 2525) wpisują port i od razu wybierają pasujące szyfrowanie: 25 daje None, 465 daje SSL, 587 i 2525 dają TLS. Limit czasu połączenia jest ustalony na 10 sekund i nie da się go zmienić. Hasło jest przechowywane w bazie zaszyfrowane algorytmem AES-256-CTR, kluczem wyprowadzonym z soli uwierzytelniania (auth salt) twojej witryny, zapisanej w pliku wp-config.php. Ten szyfr nie sprawdza integralności, więc klucz, który przestał pasować, nie daje błędu, tylko inne hasło, a wtyczka wysyła je do twojego serwera pocztowego. Jak to wygląda w dzienniku, opisuje rozdział 12, bo nie wygląda to na problem z szyfrowaniem. Jeśli OpenSSL jest niedostępny, wtyczka potrafi hasło jedynie zamaskować kodowaniem base64 i informuje o tym komunikatem na swoich ekranach. Każde z siedmiu pól można zablokować w pliku wp-config.php; zablokowane pole jest w formularzu wyszarzone i opisane jako "Defined in wp-config.php". Stałe dotyczą wyłącznie połączenia głównego i nigdy nie dotyczą połączeń dodatkowych.
- SMTP Host: domyślnie pusty. Dopóki jest pusty, poczta wychodzi przez PHP mail(), a na ekranach wtyczki widnieje żółte ostrzeżenie.
- Port: domyślnie 587.
- Encryption: None, SSL (SMTPS, zwykle port 465) albo TLS (STARTTLS, zwykle port 587). Domyślnie TLS.
- Auto TLS: domyślnie włączone. Podnosi połączenie do szyfrowanego, gdy serwer zgłasza obsługę STARTTLS.
- Authentication: domyślnie włączone. Po odznaczeniu tej opcji pola nazwy użytkownika i hasła znikają, a do serwera trafiają puste wartości.
- Username i Password: domyślnie puste. Pozostawienie pustego pola hasła przy zapisie zachowuje hasło już zapisane; do formularza nigdy nie jest wypisywane.
define( 'MSMTP_SMTP_HOST', 'smtp.example.com' );
define( 'MSMTP_SMTP_PORT', 587 );
define( 'MSMTP_SMTP_ENCRYPTION', 'tls' ); // none | ssl | tls
define( 'MSMTP_SMTP_AUTOTLS', true );
define( 'MSMTP_SMTP_AUTH', true );
define( 'MSMTP_SMTP_USER', 'user@example.com' );
define( 'MSMTP_SMTP_PASS', 'your-smtp-password' );
Settings: From Address
Dwa pola, From Email i From Name, każde z własnym polem wyboru "Force this From ... on all outgoing mail". Oba pola są domyślnie puste, oba pola Force odznaczone. Jest tu różnica, której ekran nie nazywa wprost: bez zaznaczonego Force wartość służy wyłącznie do wypełnienia nadawcy pokazywanego w dzienniku Email Log, gdy wiadomość nie miała własnego nagłówka From. Sama wysyłana wiadomość zostaje przepisana tylko wtedy, gdy Force jest zaznaczone. Jeśli chcesz, żeby wszystkie wtyczki na witrynie wysyłały z tego samego adresu, zaznacz Force. Jeżeli wymuszony adres jest nieprawidłowy, zostaje po cichu pominięty, a nadawca pozostaje bez zmian.
Settings: Email Log
Log message body jest domyślnie włączone: pełna treść wiadomości jest zapisywana, żeby dało się ją przeczytać w dzienniku i później wysłać ponownie. Retention wynosi domyślnie 30 dni; starsze wpisy usuwa codzienne zdarzenie cron msmtp_purge_logs, a 0 oznacza przechowywanie bez końca. Poczta czekająca w kolejce nigdy nie jest usuwana przez retencję, dotyczy to wyłącznie wiadomości doręczonych lub nieudanych. Jest jeszcze jeden limit, dla którego nie ma żadnego pola na ekranie: log_body_max, ograniczenie pojedynczej wiadomości do 1048576 bajtów (1 MB), przechowywane w opcji msmtp_settings. Treść większa niż to zostaje zapisana w skróconej postaci i oznaczona jako niepełna, przez co da się ją jeszcze przeczytać, ale nie wysłać ponownie ani przekazać dalej. Wyłączenie Log message body nie kończy logowania: temat, odbiorcy, nagłówki, nazwy załączników, status i błędy nadal są zapisywane. Sformułowanie z ekranu o odrzucaniu treści po doręczeniu opisuje jednak tylko połowę tego, co się dzieje. Na zwykłej ścieżce natychmiastowej wysyłki treść w ogóle nie trafia do bazy. Późniejsze usunięcie dotyczy wyłącznie wiadomości odłożonych do kolejki: ich treść jest przechowywana dosłownie, bo ten wpis to jedyna kopia wiadomości, i zostaje wyczyszczona, gdy wiadomość zostanie doręczona, trwale nieudana albo wygaśnie.
Przy włączonym zapisywaniu treści, a jest ono włączone domyślnie, w twojej bazie leży czytelna kopia każdego linku do resetu hasła, linku logowania, faktury i wiadomości do klienta wysłanych w ciągu ostatnich 30 dni. Każdy z uprawnieniem manage_options otworzy je na ekranie Email Log, a w sieci oznacza to każdego Administratora danej podwitryny, nie tylko Super Admina; każdy, kto ma kopię zapasową bazy, przeczyta je offline. I nie kończy się na czytaniu: przycisk Forward doręczy taki zapisany link resetujący pod dowolny adres wpisany w tej chwili w okienku, a jedynym śladem zostaje wiersz Forwarded przy pierwotnym wpisie. Zapisany link resetujący działa do czasu, aż WordPress go unieważni, a przycisk Re-send bez wahania dostarczy go pierwotnemu odbiorcy ponownie. Na witrynach przetwarzających dane osobowe lub płatnicze skróć okres przechowywania albo wyłącz Log message body i pogódź się z tym, że Re-send i Forward przestaną działać. Jeśli go skracasz, zostaw go co najmniej tak długim jak najdłuższe okno limitu wysyłki: licznik liczy tylko wysłane wiersze wciąż obecne w dzienniku, a resztę usuwa czyszczenie, więc krótka retencja po cichu rozbraja długi limit (rozdział 12).
Settings: Open & Click Tracking
Śledzenie jest domyślnie wyłączone i ma dwa pola wyboru. Pierwsze włącza niewidoczny obrazek o wymiarach jednego piksela i przepisuje odnośniki w wiadomości; drugie dodatkowo zapisuje adres IP przy otwarciu lub kliknięciu. Warto wiedzieć dokładnie, co jest przepisywane: mechanizm dopasowuje wyłącznie atrybuty href w cudzysłowach na elementach <a> i nic poza tym. Href bez cudzysłowów, goły adres wpisany w tekst i adres niesiony przez jakikolwiek inny element pozostają nietknięte, więc w prostszej poczcie HTML często zostaje sam piksel, bez żadnego przepisanego odnośnika. Śledzenie obejmuje tylko wiadomości, których typ treści zawiera text/html; poczta tekstowa pozostaje nietknięta. Zarówno piksel, jak i przepisane odnośniki prowadzą pod adres domowy twojej witryny z parametrami msmtp=o albo msmtp=c, tokenem i podpisem HMAC wyprowadzonym z kluczy bezpieczeństwa witryny (auth salt). Punkt końcowy odpowiada kodem 403 tylko wtedy, gdy podpis się nie zgadza, gdy zakodowanego adresu docelowego nie da się odczytać albo gdy token nie należy do żadnej wiadomości w dzienniku. Żądanie, w którym tych parametrów po prostu nie ma albo token ma zły kształt, jest ignorowane, a strona ładuje się normalnie. Jeszcze jedno przed włączeniem: przy każdym otwarciu i kliknięciu zapisywany jest ciąg user agent odbiorcy, niezależnie od tego, czy włączysz zapisywanie IP. Drugie pole wyboru rządzi wyłącznie adresem IP.
- Przepisane odnośniki prowadzą odbiorcę najpierw przez twoją witrynę, a dopiero potem pod właściwy adres. Jeśli witryna nie działa albo działa wolno, tak samo zachowa się każdy odnośnik w każdej już wysłanej wiadomości.
- Po zmianie kluczy bezpieczeństwa witryny odnośniki śledzące i piksele w już doręczonej poczcie zaczynają odpowiadać kodem 403, bo podpis jest sprawdzany nowym kluczem. Przeniesienie witryny na inną domenę psuje się inaczej: podpis obejmuje tylko typ, token i adres docelowy, nigdy hosta, więc odnośnik, który wciąż trafia do witryny, działa dalej, a ten, który już nie trafia, dostaje to, co odpowiada teraz pod tym adresem, albo nic.
- Dla poczty uwierzytelniającej nie ma wyjątku. Na każdej witrynie, na której wychodząca poczta jest deklarowana jako HTML, a tak jest na większości witryn z WooCommerce albo wtyczką formularza, link do resetu hasła lub logowania zostaje przepisany na przekierowanie przez twoją własną witrynę. Już doręczony e-mail resetujący przestaje więc działać dokładnie wtedy, gdy przestaje działać witryna. Na witrynach z jednym lub dwoma administratorami zostaw śledzenie wyłączone; jeśli stracisz dostęp przy włączonym śledzeniu, wrócisz przez WP-CLI albo bezpośrednią zmianę hasła w bazie, nie pocztą.
- Śledzenie to przetwarzanie danych osobowych. Wspomnij o śledzeniu otwarć i kliknięć w polityce prywatności.
Settings: Sending & Rate Limits
Optimized sending jest domyślnie wyłączone. Po włączeniu każda wiadomość trafia do kolejki, zamiast być doręczana w trakcie żądania strony, a zdarzenie cron msmtp_process_queue opróżnia ją paczkami po 20 sztuk co minutę. Limity wysyłki to pięć osobnych liczb: na minutę, godzinę, dobę, tydzień i miesiąc, wszystkie domyślnie 0, a 0 oznacza brak limitu. Są to okna kroczące liczone na podstawie wiadomości już oznaczonych w dzienniku jako wysłane, a "na miesiąc" znaczy kroczące 30 dni, a nie miesiąc kalendarzowy. Limity są wspólne, a nie osobne dla każdego połączenia: licznik patrzy na wszystkie wiersze oznaczone w dzienniku jako wysłane, niezależnie od tego, który serwer SMTP je doręczył, więc newsletter puszczony drugim połączeniem zjada ten sam przydział co twoje wiadomości o zamówieniach. Wszystko ponad limit trafia do kolejki i czeka, aż najstarsza policzona wiadomość wypadnie z okna, ale nigdy krócej niż 60 sekund. Dwie rzeczy omijają kolejkę: wiadomości z załącznikami nie podlegają Optimized sending, bo zapisywane są tylko ścieżki plików, a pliku może już nie być w chwili uruchomienia kolejki, oraz każda wiadomość, której treść przekracza 4 MB, zawsze wychodzi natychmiast, nawet ponad limit, ponieważ kopii tej wielkości nie da się zapisać w całości. Limity wysyłki nadal obejmują pocztę z załącznikami, a gdy limit zadziała, te załączniki muszą zostać na dysku, dopóki kolejka ich nie doręczy. Jeśli pliku wtedy nie ma, kolejka nie wstrzymuje wiadomości: brakujący załącznik zostaje odnotowany na osi czasu, a wiadomość wychodzi bez niego, przy czym wpis nadal pokazuje Sent. W kolejce wiadomość dostaje najwyżej pięć prób doręczenia łącznie, pierwszą i do czterech ponowień w odstępach 60 sekund, 5 minut, 30 minut i 2 godzin, a potem zostaje trwale oznaczona jako nieudana. To około dwóch i pół godziny od pierwszej próby, a nie kilka dni. W kodzie jest też krok sześciogodzinny, ale piąta próba jest już ostatnia, więc ten krok nigdy się nie wykonuje. Nie włączaj żadnej z tych funkcji, dopóki pole SMTP Host jest puste; dlaczego, wyjaśnia rozdział 12.
define( 'DISABLE_WP_CRON', true );
* * * * * curl -s https://example.com/wp-cron.php > /dev/null
Kolejka jest tak niezawodna jak WP-Cron, a WP-Cron uruchamia się tylko wtedy, gdy ktoś odwiedzi witrynę. Włącz Optimized sending albo ustaw dowolny limit wysyłki na witrynie o małym ruchu i bez prawdziwego zadania cron, a resety haseł, potwierdzenia zamówień i powiadomienia o nowych użytkownikach przestaną docierać, nie zostawiając nigdzie żadnego błędu. Po siedmiu dniach od terminu doręczenia wiadomości z kolejki zostają oznaczone jako nieudane z komunikatem "Expired in the queue before it could be delivered". To, czy treść to przetrwa, zależy od ustawień: przy włączonym Log message body i treści poniżej 1 MB kopia zostaje i wiadomość da się jeszcze wysłać ponownie, a przy wyłączonym zapisywaniu treści zostaje ona w tym momencie zniszczona i wiadomość przepada na zawsze. Jeśli jedyne konto administratora będzie potrzebowało resetu hasła w czasie, gdy kolejka stoi, nikt nie wróci do witryny drogą mailową. Zanim włączysz którąkolwiek z tych funkcji, wyłącz WP-Cron w pliku wp-config.php i wywołuj wp-cron.php z prawdziwego crona systemowego co minutę, korzystając z powyższego wiersza i własnej domeny.
Połączenia dodatkowe i Smart Routing
Pod głównym formularzem ustawień blok Additional SMTP Connections pozwala opisać dodatkowe serwery, każdy z własną etykietą, hostem, portem, szyfrowaniem, Auto TLS, uwierzytelnianiem, nazwą użytkownika i hasłem. Nowe wiersze startują z portem 587, TLS, włączonym Auto TLS i włączonym uwierzytelnianiem, dokładnie tak jak połączenie główne. Blok ma własny przycisk Save Connections, osobny od Save Settings. Ekran Routing decyduje potem, którego połączenia użyje każda wiadomość. Reguły są sprawdzane od góry do dołu i wygrywa pierwsza pasująca; wiadomość, która nie pasuje do niczego, idzie połączeniem głównym. Każda reguła to zestaw warunków połączonych przez "all conditions match" albo "any condition matches", wskazujący jedno połączenie. Warunek porównuje pole z wartością operatorem contains, does not contain, equals lub starts with, a wszystkie porównania ignorują wielkość liter. Dostępne pola to Subject, Message body, From address, To address i Source plugin. Wartości źródła zapisuje się jako plugin:slug, theme:slug albo wp-core, na przykład plugin:woocommerce.
- Zapis bloku Additional SMTP Connections przepisuje całą listę na podstawie tego, co przysłał formularz. Wiersz usunięty w przeglądarce znika po zapisie, tak samo jak każdy wiersz z wyczyszczonym polem Host.
- Warunki z pustą wartością są przy zapisie odrzucane, a reguła, która została bez warunków, znika razem z nimi.
- Reguła wskazująca połączenie, którego już nie ma, jest przy wysyłce pomijana. Jej wiadomość po cichu przechodzi do kolejnej pasującej reguły albo do połączenia głównego.
- Stałe MSMTP_SMTP_* nigdy nie dotyczą połączeń dodatkowych, a MSMTP_SMTP_PASS ratuje wyłącznie połączenie główne. Każde połączenie dodatkowe zawsze pobiera hasło z zaszyfrowanej wartości w bazie i nie ma stałej, która mogłaby ją zastąpić. Po zmianie kluczy bezpieczeństwa witryny w każdym połączeniu dodatkowym trzeba wpisać hasło od nowa i kliknąć Save Connections. Dopóki tego nie zrobisz, reguły routingu dalej przekazują swoją pocztę połączeniu, które nie może się uwierzytelnić, bo reguła jest pomijana tylko wtedy, gdy połączenia nie ma, nigdy wtedy, gdy jego dane logowania są błędne.
Ekran Tools
Ekran Tools zawiera cztery akcje; wszystkie działają przez własną przestrzeń REST wtyczki msmtp/v1 i wymagają tego samego uprawnienia co same ekrany. Test Connection nawiązuje połączenie z wybranym serwerem, negocjuje szyfrowanie i uwierzytelnia się, niczego nie wysyłając, a pod przyciskami wypisuje pełny zapis sesji SMTP. Send Test Email wysyła prawdziwą wiadomość HTML, z polem adresu wypełnionym adresem zalogowanego administratora. Process queue now uruchamia natychmiast jedną paczkę z kolejki, nie czekając na cron, i raportuje, ile wiadomości wysłano, ile się nie udało i ile odłożono. Purge old logs now wykonuje dokładnie ten sam kod co codzienne zdarzenie cron: w tym samym przebiegu najpierw wygasza pocztę z kolejki, której termin minął ponad siedem dni temu, a potem usuwa wpisy starsze niż okres przechowywania. Wiadomość, która stoi w kolejce dłużej niż okres przechowywania, zostaje więc jednym kliknięciem wygaszona i usunięta, nie zostawiając żadnego wpisu. Zapis sesji pokazywany przez obie akcje testowe świadomie pomija treść wiadomości i nigdy nie zawiera danych logowania: poziom debugowania PHPMailera jest ograniczony do 3, poniżej jedynego poziomu, na którym wymiana uwierzytelniająca byłaby wypisana otwartym tekstem.
Ekrany Email Log i Reports
Email Log wypisuje wszystkie wiadomości w kolumnach Subject, To, Source, Status, Opens / Clicks i Date, po dwadzieścia wierszy na stronę, i ta liczba jest stała: nie zarejestrowano dla niej żadnego pola w Screen Options. Nad tabelą są widoki All, Sent, Failed i Queued, pole wyszukiwania obejmujące temat, odbiorcę i nadawcę, lista źródeł oraz filtr zakresu dat. Otwarcie wiersza pokazuje pełny rekord: adresy, nagłówki, liczbę prób, nazwy załączników, zapis sesji SMTP z ostatniej porażki, oś czasu wszystkich zdarzeń i samą wiadomość wyrenderowaną w izolowanej ramce z usuniętym śledzeniem, a pod nią surowe źródło HTML. Re-send i Forward pojawiają się tylko wtedy, gdy status to Sent albo Failed i zapisano pełną kopię treści; wiadomości w kolejce i w trakcie wysyłki nie dostają tych przycisków, bo należą do procesu kolejki. Dalej obie akcje zachowują się inaczej i ta różnica ma znaczenie. Re-send kopiuje wiersz do nowego wpisu w dzienniku i doręcza właśnie tę kopię, więc zapis pierwszego doręczenia zostaje, a licznik limitów liczy nowy. Forward wysyła zapisaną wiadomość na jeden adres, pomijając CC i BCC, i nie tworzy żadnego wpisu w dzienniku: jedynym śladem jest pozycja Forwarded na osi czasu pierwotnej wiadomości. Przekazania nie widzi więc ani widok Sent, ani Reports, ani licznik limitów, choć dostawca policzył je jako prawdziwą wiadomość. Wychodzi ono też z adresami śledzącymi pierwotnego wiersza, więc otwarcie przekazanej kopii zostaje przypisane pierwotnej wiadomości. Limity wysyłki zmieniają także działanie tych przycisków: gdy okno jest wyczerpane, Forward odmawia wprost i nie wysyła nic, a Re-send zgłasza sukces, choć w rzeczywistości tylko umieścił kopię w kolejce na później. Reports pokazuje ostatnie 7, 30 albo 90 dni w czterech kafelkach: Sent, Failed, Open rate i Click rate, plus wykres dzienny. Oba kafelki procentowe znaczą cokolwiek tylko przy włączonym śledzeniu.
Akcja masowa Re-send wysyła prawdziwe wiadomości do pierwotnych odbiorców. Nie ma trybu testowego, podglądu ani cofnięcia; jedyne, co dzieli cię od prawdziwej wysyłki, to jedno okienko potwierdzenia w przeglądarce, "Re-send the selected emails now?". Dziennik mieści dwadzieścia wierszy na stronę, więc przypadkowe zaznaczenie pola strony, kliknięcie w tym okienku i wybranie Re-send doręczy prawdziwym klientom dwadzieścia zduplikowanych potwierdzeń zamówień, faktur albo linków do resetu hasła; dwieście to pułap pojedynczego żądania, a nie zawartość jednej strony. Żądanie jest też w pełni synchroniczne, po jednej kompletnej transakcji SMTP na wiadomość, więc na współdzielonym hostingu potrafi trafić na max_execution_time w połowie pętli: nieznana liczba duplikatów już wyszła, przeglądarka mówi tylko, że żądanie się nie powiodło, a podsumowanie przepada. Wysyłaj ponownie małymi partiami, a tego, jak daleko naprawdę zaszło, szukaj na ekranie Email Log, nie w komunikacie na ekranie. Masowe Delete jest równie ostateczne: od razu usuwa wiersze dziennika i ich historię zdarzeń z bazy, a chroni je dokładnie takie samo pytanie przeglądarki.
Pierwsze uruchomienie, po kolei
Skonfiguruj wtyczkę w tej kolejności, a nigdy nie będziesz dalej niż jeden krok od działającego ustawienia. Pierwszego dnia nie włączaj ani kolejki, ani limitów wysyłki, ani śledzenia: najpierw potwierdź, że zwykła wysyłka przez SMTP działa, a potem dokładaj po jednej funkcji i po każdej wysyłaj sobie wiadomość testową.
- Na ekranie M SMTP, Settings, wpisz SMTP Host, a potem kliknij przycisk portu, który podaje twój dostawca (587 dla STARTTLS, 465 dla SSL). Sprawdź, czy wybrane szyfrowanie zgadza się z dokumentacją dostawcy.
- Zostaw włączone Auto TLS i Authentication, wpisz Username oraz Password i kliknij Save Settings.
- Przejdź do Tools, zostaw wybrane połączenie Primary i kliknij Test Connection. Przeczytaj zapis sesji: powinien kończyć się udanym uwierzytelnieniem.
- Na tym samym ekranie Tools kliknij Send Test Email i sprawdź skrzynkę, łącznie z folderem spamu.
- Wróć do Settings, ustaw From Email i From Name, a jeśli mają obowiązywać nie tylko w dzienniku, ale i w wysyłanej poczcie, zaznacz oba pola Force.
- Zostaw włączone Log message body i Retention na 30 dniach, o ile nie masz powodu tego zmieniać. Zapisz.
- Wyślij sobie coś prawdziwego, na przykład reset hasła konta testowego, i otwórz to na ekranie Email Log: status ma być Sent, a źródło rozpoznane.
- Dopiero teraz rozważ Optimized sending albo limity wysyłki, i tylko wtedy, gdy Test Connection przechodzi, a prawdziwy cron systemowy wywołuje wp-cron.php co minutę. Żadna z tych funkcji nie jest bezpieczna, dopóki SMTP Host jest pusty.
- Połączenia dodatkowe i reguły routingu zostaw na koniec, testując każde nowe połączenie z ekranu Tools, zanim wskaże je jakakolwiek reguła.
Operacje ryzykowne i jak z nich wyjść
M SMTP nie filtruje ruchu, nie blokuje logowania i nie działa jak firewall, więc nie wyrzuci odwiedzającego z witryny bezpośrednio. Potrafi natomiast zatrzymać wysyłkę poczty, a w WordPressie to właśnie pocztą wraca się do witryny, gdy stracisz do niej dostęp. Wszystko poniżej to realny sposób na zepsucie doręczania albo utratę danych, wraz z tym, co naprawdę to odkręca. Przeczytaj przynajmniej dwa pierwsze punkty: to one wyglądają zupełnie nie na to, czym są.
- Włączenie Optimized sending albo ustawienie dowolnego limitu wysyłki, gdy pole SMTP Host jest jeszcze puste. Decyzja o skierowaniu wiadomości do kolejki zapada, zanim cokolwiek sprawdzi host, a przerwanie wysyłki nie pozwala WordPressowi wrócić do PHP mail(). Witryna, która doskonale doręczała przez PHP mail(), przestaje więc doręczać w ogóle: proces kolejki prosi o połączenie, dostaje "No SMTP host is configured", ponawia cztery razy i po jakichś dwóch i pół godzinach oznacza wiadomość jako trwale nieudaną. Razem z nią giną resety haseł, a poza dziennikiem nic o tym nie mówi. Naprawa: w Settings przywróć wszystkie limity do 0, odznacz Optimized sending i zapisz. Nowa poczta od razu znowu wychodzi przez PHP mail(). Wiersze, które już się nie udały, to osobny problem, bo Re-send i Forward zawsze wymagają działającego połączenia SMTP: na witrynie, która nigdy go nie miała, odpowiadają "No SMTP connection is configured." i nie wysyłają nic. Masz więc dwie drogi: albo uzupełnij SMTP Host, przejdź pomyślnie Test Connection i dopiero wtedy wyślij nieudane wiersze ponownie z ekranu Email Log, albo odpuść te wiersze i wywołaj tę pocztę na nowo u źródła, prosząc o świeży reset hasła albo wysyłając wiadomość o zamówieniu ponownie z WooCommerce. Ich treść wciąż tam jest, o ile Log message body jest włączone, a wiadomość nie przekraczała 1 MB, więc skonfigurowanie SMTP i spróbowanie nic nie kosztuje.
- Zmiana kluczy i soli bezpieczeństwa WordPressa w pliku wp-config.php, gdy hasło SMTP leży w bazie. Zapisane hasło jest szyfrowane algorytmem AES-256-CTR, który nie sprawdza integralności, więc odszyfrowanie nowym kluczem nie kończy się błędem: zwraca inny ciąg. Wtyczka podaje ten ciąg twojemu prawdziwemu serwerowi SMTP, ten go odrzuca, a dziennik zapełnia się zwykłymi błędami uwierzytelniania, najczęściej 535 albo "Could not authenticate", z zapisem sesji, która nawiązała połączenie, wynegocjowała szyfrowanie i doszła do AUTH. Nic w nim nie wspomina o odszyfrowaniu ani o kluczach bezpieczeństwa. Jeśli dopiero co zmieniłeś sole i nagle każda wiadomość nie przechodzi uwierzytelnienia, to jest właśnie przyczyna, choćby zapis sesji wskazywał uparcie na dostawcę. W tej samej chwili psuje się śledzenie i tam widać to wprost: każdy piksel i przepisany odnośnik w już doręczonej poczcie zaczyna zwracać 403, bo HMAC pochodzi z tej samej soli. Naprawa: otwórz Settings, wpisz hasło SMTP jeszcze raz i kliknij Save Settings, a potem zrób to samo dla każdego wiersza w Additional SMTP Connections i kliknij Save Connections. Zdefiniowanie MSMTP_SMTP_PASS chroni przed kolejną zmianą tylko połączenie główne i nie daje nic połączeniom dodatkowym. Starych odnośników śledzących nie da się przywrócić.
- Pozostawienie poczty w kolejce dłużej niż siedem dni. Niezależnie od przyczyny, czy to zepsuty cron, wyłączona wtyczka, czy limit, który nigdy nie zwalnia, siedem dni po terminie wiadomość zostaje oznaczona jako nieudana z komunikatem "Expired in the queue before it could be delivered". Przy włączonym Log message body i treści poniżej 1 MB kopia przetrwa i wiersz da się jeszcze wysłać ponownie; przy wyłączonym zapisywaniu treści zostaje ona w tym momencie zniszczona i wiadomości nie odzyskasz. Gorzej: ten sam przebieg, który wygasza wpis, egzekwuje też retencję, więc wiadomość stojąca w kolejce dłużej niż okres przechowywania zostaje jednym uruchomieniem wygaszona i usunięta, nie zostawiając niczego. Jedyny środek zapobiegawczy to Tools, Process queue now, zanim minie tydzień.
- Zbyt niski limit wysyłki. Limity obejmują każdą wiadomość, także resety haseł i powiadomienia o nowych użytkownikach, a nie tylko pocztę masową. Wszystko ponad limit trafia do kolejki, a gdy WP-Cron nie działa, zostaje tam aż do opisanego wyżej siedmiodniowego terminu. Naprawa: przywróć wszystkie limity do 0 i zapisz, potem Tools, Process queue now. Jeśli nie masz dostępu do kokpitu, usuń opcję msmtp_settings, co przywraca wszystkie ustawienia domyślne, w tym wyłącza każdy limit.
- Włączenie Optimized sending bez prawdziwego zadania cron. Każda wiadomość idzie do kolejki i z witryny nie wychodzi nic. Objawem jest rosnący widok Queued na ekranie Email Log, bez żadnych błędów. Naprawa: odznacz Optimized sending i zapisz, potem kliknij Tools, Process queue now. Jedno kliknięcie wysyła jedną paczkę dwudziestu wiadomości, więc klikaj tyle razy, ile trzeba; a jeśli czekają setki, najpierw skonfiguruj prawdziwego crona systemowego i dopiero potem spróbuj ponownie.
- Dezaktywacja wtyczki przy niepustej kolejce. Dezaktywacja kasuje oba zdarzenia cron na tej witrynie, na której się wykonuje, więc to, co zostało tam w kolejce, przestaje się ruszać; przy dezaktywacji sieciowej każda pozostała podwitryna zachowuje oba zdarzenia w harmonogramie, choć nic już na nie nie odpowiada, i jej kolejka staje tak samo. Naprawa: aktywuj ponownie, co przywraca oba zdarzenia, i uruchom kolejkę z ekranu Tools, ale tylko jeśli zdążysz w opisanym wyżej siedmiodniowym oknie. A jeśli wtyczka została "wyłączona" przez zmianę nazwy katalogu po SFTP, WordPress w ogóle nie uruchamia haka dezaktywacji: oba zdarzenia zostają w harmonogramie, choć nic już na nie nie odpowiada, a poczta w kolejce dalej starzeje się w stronę wygaśnięcia.
- Włączenie śledzenia na witrynie z jednym lub dwoma administratorami. Każda wiadomość HTML wysyłana przez witrynę, w tym resety haseł i linki logowania, wychodzi wtedy z odnośnikami prowadzącymi przez samą witrynę. Jeśli zmieniono sole, takie odnośniki odpowiadają kodem 403; jeśli witryna nie działa albo jej nie ma, nie odpowiadają w ogóle. Tak czy inaczej e-mail leżący już w twojej skrzynce nie wpuści cię z powrotem. Naprawa to WP-CLI albo bezpośrednia zmiana hasła w bazie. Odnośniki już wysłane pozostają zepsute.
- Skrócenie okresu przechowywania. Codzienne czyszczenie trwale usuwa wpisy starsze niż okno, bez cofnięcia i bez wcześniejszego eksportu. Zejście z 30 dni na 1 wyrzuci przy najbliższym przebiegu prawie cały dziennik. Purge old logs now robi to samo natychmiast. Po cichu osłabia to również limity wysyłki: licznik liczy tylko wysłane wiersze, które wciąż są w dzienniku, więc okno dłuższe niż okres przechowywania nigdy nie zobaczy własnej historii. Retencja 7 dni przy limicie 5000 na miesiąc oznacza, że limit miesięczny widzi najwyżej siedem dni wysyłki i przestaje chronić konto u dostawcy na długo przed osiągnięciem tej liczby. Trzymaj retencję co najmniej tak długą jak najdłuższe okno limitu wysyłki.
- Usuwanie wpisów dziennika. Akcja Delete w wierszu i masowe Delete usuwają wiadomość wraz z historią zdarzeń z bazy od razu.
- Masowe Re-send. Prawdziwe wiadomości znów trafiają do pierwotnych odbiorców, do dwustu na żądanie, bez możliwości cofnięcia, a żądanie przerwane w połowie zdążyło już doręczyć wszystko do tego miejsca.
- Wyczyszczenie pola Host w połączeniu dodatkowym albo usunięcie jego wiersza przed zapisem. Połączenie znika, a reguły routingu wskazujące na nie są po cichu pomijane, więc ich poczta niepostrzeżenie przenosi się na serwer główny. Nic o tym nie ostrzega.
- Gdy włączysz usuwanie danych przy odinstalowaniu, a potem skasujesz wtyczkę. Obie tabele zostają usunięte, a wszystkie opcje skasowane. Dziennik przywróci wyłącznie kopia zapasowa bazy.
Najbardziej dotkliwym błędem jest zmiana soli w pliku wp-config.php na witrynie, której hasło SMTP leży w bazie, a kosztuje dni dlatego, że sam się nie ujawnia. Nie ma żadnego błędu odszyfrowania. Wtyczka po cichu wysyła błędne hasło, serwer pocztowy odpowiada błędem uwierzytelniania, a wszystkie dowody w zapisie sesji wskazują na dostawcę. Dlatego zawsze, gdy uwierzytelnianie zaczyna zawodzić na połączeniu, które działało, a u dostawcy nic się nie zmieniło, sprawdź najpierw sole. Trzymanie hasła w stałej MSMTP_SMTP_PASS chroni przed tym wyłącznie połączenie główne; połączenia dodatkowe nie mają takiego wyjścia i trzeba je wpisać ręcznie.
Awaryjne odzyskiwanie bez kokpitu
Jeśli poczta stanęła, a do kokpitu nie masz dostępu, pracuj z powłoki albo przez SFTP. Wtyczka nie dostarcza własnych poleceń WP-CLI, więc poniższe komendy to zwykłe WP-CLI działające na nazwach opcji i hakach cron, z których korzysta. Zapisuje w sumie pięć opcji: msmtp_settings, msmtp_connections, msmtp_routing_rules, msmtp_db_version oraz, na krótko podczas aktualizacji schematu, msmtp_upgrade_lock; poniższy blok dotyka trzech z nich. Usunięcie msmtp_settings jest naprawdę bezpieczne: przy następnym żądaniu wtyczka odtwarza ją z wartości domyślnych, co wyłącza wszystkie limity wysyłki, wyłącza Optimized sending, wyłącza śledzenie i z powrotem włącza zapisywanie treści. Tracisz konfigurację, a nie tabele czy dziennik. Usunięcie msmtp_connections to inna sprawa. To jedyne miejsce, w którym trzymane jest połączenie główne i każde dodatkowe, więc znikają wraz z nim hosty, nazwy użytkowników i zaszyfrowane hasła, a każde dane trzeba wpisać od nowa; reguły routingu wskazujące połączenie, którego już nie ma, są przy wysyłce po cichu pomijane. Nie przywraca to też PHP mail(), gdy w wp-config.php zdefiniowano MSMTP_SMTP_HOST, bo stała zostaje nałożona na połączenie główne już przy następnym żądaniu; hasła i tak przepadają. Jeśli nie masz też powłoki, zmień przez SFTP nazwę katalogu wtyczki: WordPress dezaktywuje wtyczkę, której plik zniknął, a poczta wraca do PHP mail(). Dane pozostają nietknięte, ale hak dezaktywacji się nie uruchamia, więc msmtp_process_queue i msmtp_purge_logs zostają zaplanowane na hak, na który nic nie odpowiada, a to, co już czeka w kolejce, dalej zbliża się do siedmiodniowego wygaśnięcia. Przywróć nazwę katalogu i uruchom Tools, Process queue now w ciągu tygodnia.
# Reset every M SMTP setting to its shipped default
# (turns off all rate limits, Optimized sending and tracking)
wp option delete msmtp_settings
# WARNING: this also destroys every stored SMTP password,
# for the primary connection and for all additional ones.
# It does NOT restore PHP mail() if MSMTP_SMTP_HOST is defined:
# the constant puts the host straight back on the next request.
wp option delete msmtp_connections
# Drop all conditional routing rules
wp option delete msmtp_routing_rules
# Send ONE batch of 20 from the queue, right now
# (run it again for the next 20)
wp cron event run msmtp_process_queue
# Turn the plugin off completely; wp_mail() reverts to PHP mail()
wp plugin deactivate m-smtp
# No shell? Rename the folder over SFTP and WordPress deactivates it
# (silently: the deactivation hook does NOT run, cron events stay):
# wp-content/plugins/m-smtp -> wp-content/plugins/m-smtp.off
Rozwiązywanie problemów
Niemal każde zgłoszenie sprowadza się do jednej z poniższych pozycji. Zacznij od ekranu Email Log: kolumna statusu, błąd pod nieudanym wierszem i zapis sesji SMTP w widoku szczegółów zwykle nazywają przyczynę wprost. Jedyny przypadek, w którym dziennik wskazuje w złą stronę, to zmiana soli, więc ma własny punkt.
- Żółty komunikat mówi, że M SMTP nie jest jeszcze skonfigurowany. Pole SMTP Host jest puste, a WordPress dalej korzysta z PHP mail(). Uzupełnij host, a do tego czasu nie zaznaczaj Optimized sending i nie ustawiaj żadnego limitu wysyłki.
- Test Connection kończy się niepowodzeniem. Prawie zawsze port kłóci się z szyfrowaniem: 465 wymaga SSL, 587 i 2525 wymagają TLS, 25 wymaga None i tak czy owak bywa blokowany przez hosting. Zapis sesji pokazuje dokładnie, jak daleko zaszła rozmowa.
- Nagle każda wiadomość kończy się błędem uwierzytelniania SMTP, najczęściej 535 albo "Could not authenticate", a zapis sesji dochodzi do AUTH. Jeśli u dostawcy nic się nie zmieniło, zmieniły się sole w pliku wp-config.php. Zapisane hasło odszyfrowuje się teraz na coś innego i w takiej postaci zostaje wysłane, a błędu odszyfrowania nie ma nigdzie. Wpisz hasło SMTP ponownie w Settings oraz w każdym połączeniu dodatkowym i zapisz. Zdefiniuj MSMTP_SMTP_PASS, żeby połączenie główne przetrwało kolejną zmianę.
- Wiadomość kończy się błędem mówiącym o zapisanym haśle i odszyfrowaniu. To uszkodzona albo ucięta zapisana wartość, albo OpenSSL, który zniknął z serwera po zaszyfrowaniu hasła. Zmiana soli wygląda inaczej. Wpisz hasło od nowa.
- Wiadomości stoją w statusie Queued i nie ruszają się. WP-Cron nie działa. Kliknij Tools, Process queue now, żeby potwierdzić, że wychodzą, a potem skonfiguruj prawdziwe zadanie cron.
- Wiadomości z kolejki kończą się błędem "No SMTP host is configured". Optimized sending albo limit wysyłki wepchnął je do kolejki, gdy pole SMTP Host było jeszcze puste. Ustawienie wszystkich limitów na 0 i odznaczenie Optimized sending przywraca nowej poczcie PHP mail(), ale nie odzyskuje nieudanych wierszy: Re-send i Forward zawsze wymagają działającego połączenia SMTP i dopóki host jest pusty, odpowiadają "No SMTP connection is configured.". Żeby odzyskać te wiersze, najpierw uzupełnij host i przejdź Test Connection; w przeciwnym razie wywołaj tę pocztę na nowo u źródła.
- Wiadomości wychodzą natychmiast, mimo włączonego Optimized sending. Mają załączniki albo ich treść przekracza 4 MB. Oba przypadki celowo omijają kolejkę.
- Doręczona wiadomość dotarła bez załącznika. Pliku nie było już na dysku, gdy uruchomiła się kolejka. Wiadomość i tak wyszła, a wiersz nadal pokazuje Sent; jedynym zapisem jest jedna linia na osi czasu w widoku szczegółów. Sprawdzaj oś czasu każdej wiadomości z załącznikiem, która przeszła przez kolejkę.
- Przekazanej wiadomości nie ma ani w dzienniku, ani w Reports. I nie będzie. Forward nie tworzy własnego wpisu, tylko pozycję Forwarded na osi czasu pierwotnej wiadomości, a licznik limitów też jej nie liczy.
- Brakuje przycisku Re-send. Zapisana kopia jest niepełna: przy wysyłce logowanie treści było wyłączone, treść przekroczyła limit 1 MB, albo wiersz ma teraz status Queued lub Sending.
- Wiersz jest nieudany z komunikatem "Send was intercepted by another plugin". Inna wtyczka pocztowa przerwała wysyłkę, zanim M SMTP zdążył przekazać ją do SMTP. Wyłącz tamtą wtyczkę.
- Wiersz jest nieudany z komunikatem "Delivery status unknown". Żądanie przerwało się między zapisaniem wiadomości a wynikiem z mailera, a wiersz przez ponad 15 minut pozostawał w statusie Sending. Z dziennika nie da się ustalić, czy wiadomość dotarła.
- Reports pokazuje 0 procent otwarć. Śledzenie jest wyłączone, poczta jest tekstowa, odnośniki nie miały postaci, którą rozpoznaje mechanizm przepisywania, albo programy odbiorców blokują zdalne obrazki, co jest normą.
- Komunikat mówi, że OpenSSL jest niedostępny. Hasło da się tylko zamaskować, nie zaszyfrować. Przenieś je do MSMTP_SMTP_PASS.
Prywatność i co jest zapisywane
M SMTP nie nawiązuje żadnych połączeń na zewnątrz poza serwerem SMTP, który skonfigurujesz. Nie ma usług zewnętrznych, sprawdzania licencji ani analityki. Wszystko, co wtyczka wie, leży w twojej własnej bazie. Tabela wp_msmtp_emails przechowuje dla każdej wiadomości: odbiorców łącznie z CC i BCC, Reply-To, nadawcę, temat, treść wiadomości przy włączonym logowaniu treści, nagłówki własne, nazwy, ścieżki i rozmiary załączników (same pliki nigdy nie są kopiowane), status doręczenia i błąd, zapis sesji SMTP z ostatniej porażki, wtyczkę lub motyw, które wiadomość wysłały, oraz znaczniki czasu utworzenia, wysłania, otwarcia i kliknięcia. Tabela wp_msmtp_events przechowuje oś zdarzeń: queued, attempt, sent, failed, resent, forwarded, open i click wraz z adresem klikniętego odnośnika. Zapis sesji z założenia nigdy nie zawiera ani treści wiadomości, ani wymiany uwierzytelniającej.
- Opcje zapisywane w wp_options: msmtp_settings, msmtp_connections, msmtp_routing_rules, msmtp_db_version oraz, na krótko podczas aktualizacji schematu, msmtp_upgrade_lock. Jeden transient, msmtp_plugin_names, przechowuje nazwy wtyczek przez godzinę.
- Hasło SMTP jest zapisywane zaszyfrowane algorytmem AES-256-CTR. Zdefiniowanie MSMTP_SMTP_PASS trzyma je całkowicie poza bazą, co jest zalecane na każdej witrynie, której baza trafia do kopii zapasowych poza serwerem. Obejmuje wyłącznie połączenie główne.
- Przy włączonym śledzeniu każde otwarcie i kliknięcie zapisuje ciąg user agent odbiorcy. Adres IP jest zapisywany tylko po dodatkowym zaznaczeniu opcji IP, domyślnie wyłączonej.
- Domyślny okres przechowywania to 30 dni, po nich wpisy doręczone i nieudane oraz ich zdarzenia są usuwane. Poczta w kolejce nie podlega retencji do czasu wygaśnięcia: wtedy staje się wpisem nieudanym i podlega jej tak jak każdy inny.
- Przekazana wiadomość zostawia jedynie zdarzenie Forwarded przy pierwotnym wpisie. Poza szczegółem tego zdarzenia nie ma osobnego zapisu, do kogo trafiła.
- To treść wiadomości czyni dziennik wrażliwym. Reszta to metadane; w treści mogą być linki resetujące, faktury i dane osobowe.
Odinstalowanie
Dezaktywacja i usunięcie to tutaj dwie różne rzeczy. Dezaktywacja kasuje oba zaplanowane zdarzenia, msmtp_process_queue i msmtp_purge_logs, i sprawia, że wtyczka przestaje dotykać wp_mail(), więc WordPress natychmiast wraca do PHP mail(). W sieci to kasowanie obejmuje tylko tę witrynę, na której się wykonuje: aktywacja przechodzi przez wszystkie witryny sieci, dezaktywacja nie, więc po dezaktywacji sieciowej oba zdarzenia zostają zaplanowane na każdej pozostałej podwitrynie, choć nic już na nie nie odpowiada, dokładnie jak w opisanym w rozdziale 12 przypadku zmiany nazwy katalogu. Tabele, dziennik, ustawienia i połączenia zostają dokładnie tam, gdzie były, a ponowna aktywacja podejmuje pracę w tym samym miejscu, z zastrzeżeniem siedmiodniowego wygaśnięcia kolejki opisanego w rozdziale 12. Usunięcie wtyczki z ekranu Plugins uruchamia procedurę odinstalowania, a to, co ona zrobi, zależy wyłącznie od jednego pola: Settings, Uninstall, "Delete all settings and email logs when the plugin is uninstalled", domyślnie odznaczonego. Przy odznaczonym polu usuwane są tylko pliki, a wszystkie tabele i opcje zostają, więc późniejsza ponowna instalacja zastanie stary dziennik w całości. Przy zaznaczonym obie tabele zostają usunięte, pięć opcji oraz wpis transient zostają skasowane, a oba zdarzenia cron wyczyszczone. W trybie multisite procedura odinstalowania wykonuje się dla każdej witryny w sieci, a wartość tego pola jest odczytywana osobno dla każdej z nich.
Przed usunięciem nic nie jest eksportowane. Gdy procedura odinstalowania ruszy z zaznaczonym "Delete all settings and email logs", tabele wp_msmtp_emails i wp_msmtp_events znikają wraz z każdą treścią wiadomości, każdym zapisem doręczenia i każdym zdarzeniem śledzenia. Jeśli dziennik ma dla ciebie wartość dowodową, na przykład jako potwierdzenie, że potwierdzenie zamówienia rzeczywiście dotarło, zrób najpierw zrzut bazy danych.
Automatyczne aktualizacje
Wtyczka sprawdza majevski.com pod kątem nowych wydań i proponuje je przez zwykły ekran aktualizacji WordPressa — ten sam komunikat, lista zmian i instalacja jednym kliknięciem jak przy każdej innej wtyczce. Sprawdzenia są buforowane, nigdy nie spowalniają strony i są odporne na awarie: jeśli majevski.com jest nieosiągalny, witryna po prostu działa dalej i próbuje później. Pakiet aktualizacji jest przyjmowany wyłącznie z majevski.com przez HTTPS, a starsza wersja nigdy nie jest proponowana. Wersje starsze niż 1.1.0 nie znają jeszcze kanału aktualizacji, więc nie widzą nowych wydań — zainstaluj raz ręcznie 1.1.0 lub nowszą, a każde kolejne wydanie przyjdzie samo.
Potrzebujesz czegoś podobnego?
Wszystko na tej stronie zaprojektowała, zbudowała i utrzymuje jedna osoba. Jeśli potrzebujesz tego samego dla swojej firmy, napisz, co masz na myśli.
Umów rozmowę otwiera się w nowej karcie