Co robi
WordPress przekazuje każdą wiadomość własnej funkcji mail() serwera, która nie uwierzytelnia nadawcy. Skrzynki pocztowe traktują taką pocztę podejrzliwie, a gdy zostanie odrzucona, nikt się o tym nie dowiaduje: wp_mail() zwraca false, strona działa dalej, a resetowanie hasła albo potwierdzenie zamówienia po prostu znika.
MevvMail zastępuje tę ścieżkę. Wysyła przez uwierzytelnione połączenie skonfigurowane przez użytkownika, przechodzi listę połączeń w kolejności priorytetów, aż któreś przyjmie wiadomość, ponawia te, które zawiodły, i pokazuje status dostarczenia wiadomości zamówienia WooCommerce wprost na ekranie zamówienia.
- Kiedy jej używać
- Sklep wysyła wiadomości o zamówieniach, koncie albo faktury, a na pytanie „czy poszła?” trzeba móc odpowiedzieć zapisem, a nie domysłem.
- Dopóki nie zostanie skonfigurowany, nic nie zmienia
- Gdy nie zdefiniowano żadnego połączenia, filtr oddaje wysyłkę z powrotem do WordPressa. Włączenie wtyczki nigdy nie przejmuje po cichu działającej ścieżki pocztowej.
- To nie jest usługa wysyłkowa
- MevvMail nie odsprzedaje dostarczania i nie ma własnego limitu. Własny serwer SMTP albo własne konto u dostawcy zapewnia użytkownik, a wtyczka z niego korzysta.
Wymagania: WordPress 6.0 lub nowszy oraz PHP 8.1 lub nowszy. WooCommerce jest opcjonalny — bez niego wszystko działa tak samo, brakuje tylko ramki zamówienia.
Instalacja
- Należy zainstalować darmową wtyczkę MevvMail: wgrać archiwum zip w Wtyczki → Dodaj nową albo skopiować katalog
mevvmaildo/wp-content/plugins/. - Następnie ją włączyć. Nic nie zostaje jeszcze przejęte.
- Otworzyć MevvMail → Połączenia i dodać pierwsze połączenie.
- Nacisnąć Wyślij e-mail testowy i potwierdzić, że wiadomość dociera.
- Opcjonalnie, ale zalecane: dodać drugie połączenie o niższym priorytecie jako zapasowe.
- Tylko jeśli potrzebne są ekrany Pro: zainstalować MevvMail Pro jako drugą wtyczkę i aktywować licencję MEVM w MevvMail → Licencja.
Gdy Pro jest zainstalowane, darmowa wtyczka ma pozostać włączona. Wysyłka, przełączanie awaryjne i dziennik mieszkają w darmowej wtyczce, więc wygasła licencja nigdy nie zatrzymuje wysyłania poczty przez sklep.
Połączenia
Połączenie to jedna droga wyjścia z witryny. Dostępnych jest dziesięć typów i każdy z nich jest w darmowej wtyczce — żadna funkcja nie jest wstrzymana i nie narzucamy limitu wysyłki.
Pola na ekranie
- Nazwa
- Własna etykieta połączenia. To ona pojawia się w dzienniku w kolumnie Połączenie, więc warto nadać nazwę, którą rozpozna się o trzeciej nad ranem.
- Dostawca
- Wybór typu. Reszta formularza zmienia się razem z nim: SMTP pyta o host, port, szyfrowanie i dane logowania, a dostawca API o klucz, w przypadku Mailgun i SparkPost także o region.
- Priorytet
- Liczba. Łańcuch przechodzony jest od najniższego priorytetu w górę, więc główne połączenie dostaje najmniejszą liczbę, a zapasowe większą.
- Nazwa nadawcy i adres nadawcy
- Nadawca, w którego imieniu wychodzi wiadomość. Należy użyć adresu w domenie, której rekordy SPF, DKIM i DMARC wskazują dostawcę, przez którego odbywa się wysyłka — inaczej skrzynka pozostanie podejrzliwa nawet wobec bezbłędnie dostarczonej poczty.
- Wymuszaj tego nadawcę w każdej wiadomości
- Domyślnie wyłączone. Gdy jest włączone, to połączenie nadpisuje nadawcę, którego niosła wiadomość. Przydaje się, gdy jakaś wtyczka wysyła z adresu, którego dostawca nie autoryzuje; szkodzi, gdy nadawcy ustawiani osobno dla każdej wtyczki są naprawdę potrzebni.
- Aktywne
- Nieaktywne połączenie jest pomijane przez łańcuch i zostaje na ekranie. W ten sposób wyłącza się jednego dostawcę z ruchu bez utraty jego ustawień.
Zapisane wartości tajne nigdy nie są wypisywane z powrotem do formularza. W polach hasła i klucza API widnieje „Zapisane — pozostaw puste, aby zachować”: wartość wpisuje się tylko wtedy, gdy się ją zmienia.
Warto sprawdzić, zanim się zaufa
Wyślij e-mail testowy wysyła prawdziwą wiadomość przez to jedno połączenie i zapisuje wynik w dzienniku jak każdą inną wysyłkę. Jeśli się nie uda, dziennik niesie własną odpowiedź dostawcy — a to niemal zawsze zdanie, które mówi, co jest nie tak.
Łańcuch i to, co dzieje się przy niepowodzeniu
Gdy WordPress tworzy wiadomość, MevvMail przechodzi połączenia w kolejności priorytetów i zatrzymuje się na pierwszym, które ją przyjmie. Dostawca ograniczający liczbę żądań, z wyczerpanym limitem albo niedziałający kosztuje jedną próbę, a nie wiadomość. Całe przejście zapisywane jest jako jeden wpis dziennika, a nie jeden na połączenie: pojedyncza wiadomość nie powinna czytać się jak trzy osobne niepowodzenia.
Gdy wszystkie połączenia odmówiły, wpis zapisywany jest jako nieudany i trafia do kolejki ponowień. Jest próbowany jeszcze trzy razy — po minucie, po pięciu minutach i po trzydziestu minutach — i na tym się kończy. Adres, który nie istnieje, nie zacznie istnieć przy czterdziestej próbie.
Ponowienia planowane są przez WP-Cron, który uruchamia się tylko wtedy, gdy ktoś odwiedzi witrynę. Na spokojnej witrynie ponowienie może nastąpić później niż w zaplanowanej minucie. Jeżeli to ma znaczenie, można przejść na prawdziwego crona serwerowego zwykłą drogą — DISABLE_WP_CRON w wp-config.php plus wywołanie wp-cron.php z crontaba. Po stronie MevvMail nie trzeba niczego zmieniać.
Łańcuch, który ma sens
- Dwa połączenia u dwóch różnych dostawców chronią przed złym dniem jednego dostawcy. Dwa połączenia u tego samego dostawcy nie chronią.
- W łańcuchu należy trzymać jedno połączenie SMTP, inaczej wiadomości z załącznikami nie mają dokąd pójść (patrz niżej).
- PHP
mail()to rozsądna ostateczność, ale kiepski pierwszy wybór: to właśnie ta nieuwierzytelniona ścieżka, dla której zastąpienia wtyczka istnieje.
Dziennik wiadomości
Każda próba zapisywana jest w tabeli we własnej bazie danych. Nic z poczty nie jest wysyłane do nas — w żadnym miejscu wtyczki nie ma telemetrii, analityki ani skanowania treści.
- Co jest zapisywane
- Czas, odbiorcy, temat, status, połączenie, które obsłużyło wiadomość, część witryny, która ją wytworzyła, własna odpowiedź dostawcy i liczba prób.
- Filtry
- Według statusu (wysłane, nieudane, oczekujące), według źródła i według daty. Te trzy razem to zwykle całe dochodzenie w zgłoszeniu wsparcia.
- Źródło
- Wiadomość może nieść etykietę mówiącą, która wtyczka ją wytworzyła — formularz, wiadomość odzyskująca, powiadomienie WooCommerce. Etykieta zapisywana jest we własnej kolumnie i zdejmowana z wiadomości przed wysyłką, więc nigdy nie dociera do osoby, która ją odbiera.
- Wyślij ponownie
- Każdy wpis można wysłać ponownie z listy. Wraca do łańcucha od góry, więc użyte zostanie połączenie, które w międzyczasie naprawiono.
- Przechowuj treść wiadomości
- Domyślnie włączone. Po wyłączeniu dziennik zachowuje tylko nagłówki. Taki wpis można wtedy obejrzeć, ale nie wysłać ponownie — a nieudana wysyłka nie trafia też do kolejki drabiny ponawiania, bo w obu przypadkach nie zachowano niczego do wysłania.
- Przechowuj wpisy dziennika przez
- 7, 30, 90 dni albo bezterminowo. Starsze wpisy usuwane są zgodnie z harmonogramem.
Dziennik może zawierać dane osobowe — adresy, tematy oraz, jeżeli ustawienie pozostanie włączone, treści wiadomości. Przed uruchomieniem produkcyjnym warto przejrzeć ustawienie przechowywania i opcję treści pod kątem własnych obowiązków, tak samo jak każdy inny rekord sklepu.
Odinstalowanie
Usunięcie wtyczki nie rusza dziennika ani ustawień. Na ekranie ustawień jest jedna zgoda do zaznaczenia — Przy usuwaniu wtyczki usuń też tabelę dziennika i wszystkie ustawienia — i domyślnie jest wyłączona, bo niszczące odczytanie słowa „odinstalowanie” nigdy nie powinno być tym, które dostaje się przypadkiem.
Załączniki
W wersji 1.0.0 załączniki podróżują wyłącznie przez SMTP. Ośmiu dostawców API ich nie wysyła i jest to celowe ograniczenie, a nie błąd: każde z tych API chce pliku w innym kształcie, a wypuszczenie ośmiu w połowie przetestowanych koderów nie było tego warte.
- Wiadomość z plikiem trwale pomija połączenia API i szuka w łańcuchu połączenia SMTP.
- Gdy połączenie SMTP jest skonfigurowane, faktury, bilety i pliki PDF wychodzą normalnie.
- Gdy nie skonfigurowano żadnego połączenia SMTP, taka wiadomość zapisywana jest w dzienniku jako nieudana, zamiast zostać dostarczona bez pliku — ciche dostarczenie bez faktury byłoby gorsze niż widoczne niepowodzenie.
Praktyczna zasada mieści się w jednej linijce: w łańcuchu trzeba trzymać jedno połączenie SMTP, cokolwiek jeszcze w nim jest.
Zamówienia WooCommerce
Gdy WooCommerce jest aktywny, każdy ekran zamówienia dostaje ramkę z listą wiadomości, które to zamówienie wytworzyło, i statusem dostarczenia każdej z nich. Na pytanie „czy klient dostał potwierdzenie?” odpowiada się przy zamówieniu, a nie przez przeszukiwanie dziennika.
Dziennik zapisuje też, którą wiadomością WooCommerce była dana poczta, więc ponowienie po pół godziny nadal wie, co wysyła — a przy licencji Pro także, która reguła routingu i który temat go dotyczą.
MevvMail działa dokładnie tak samo na witrynie bez WooCommerce. Po prostu nie ma tam ramki zamówienia.
Co dodaje licencja Pro
Wszystko powyżej jest w darmowej wtyczce: dziesięć typów połączeń, łańcuch awaryjny, drabina ponawiania, dziennik, ponowna wysyłka i ramka zamówienia WooCommerce. Pro to osobna wtyczka, która dokłada głębię WooCommerce na wierzchu wysyłki.
- Projektant wiadomości WooCommerce
- Logo, kolor podstawowy, kolor tła, tekst stopki i temat dla każdego typu wiadomości, wraz z podglądem zapisanego projektu. Projekt stosuje darmowa wtyczka, więc przetrwa wyłączenie licencji.
- Śledzenie otwarć
- Opcjonalny piksel 1×1 serwowany przez własną witrynę, zapisywany jako pojedynczy znacznik czasu w kolumnie Otwarto w dzienniku. Domyślnie wyłączone. Nie są zbierane żadne adresy IP, klient poczty, odsyłacz, lokalizacja, urządzenie ani liczba otwarć, a współczynnik otwarć nie jest nigdzie pokazywany.
- Alerty o awariach
- Jedna wiadomość albo jeden webhook na awarię, po wybranej liczbie kolejnych niepowodzeń. Alert wychodzi własną ścieżką pocztową serwera — dzięki temu może dotrzeć nawet wtedy, gdy zepsute są właśnie połączenia — i nie niesie odbiorcy, tematu ani treści z nieudanej wiadomości.
- Routing warunkowy
- Reguły oparte na etykiecie źródła albo na typie wiadomości WooCommerce przesuwają połączenie na początek łańcucha. Łańcuch nigdy nie jest zawężany, więc przełączanie awaryjne działa dalej, a reguła dopasowuje się także przy opóźnionym ponowieniu.
Licencję aktywuje się w MevvMail → Licencja kluczem zaczynającym się od MEVM. Gdy wygaśnie, projektant, śledzenie, alerty i routing przestają działać; wysyłka, przełączanie awaryjne i dziennik idą dalej, bo nigdy nie należały do Pro.
Śledzenie otwarć to wskazówka, a nie pomiar. Skrzynka blokująca obrazy albo serwer pośredniczący, który je buforuje, sprawia, że piksel milczy lub odzywa się za wcześnie. Dlatego zachowywane jest tylko pierwsze otwarcie i dlatego produkt nie pokazuje współczynnika otwarć.
Co opuszcza serwer
Dwie rzeczy i obie są tu wymienione.
- Poczta, do skonfigurowanego dostawcy. Nadawca, odbiorcy, temat, treść, ewentualne Reply-To i nagłówki własne oraz własny klucz API, żeby dostawca mógł uwierzytelnić użytkownika. MevvMail nie dodaje niczego — żadnego adresu witryny, żadnych danych użytkownika, żadnego naszego identyfikatora — i do żadnego dostawcy nic nie jest wysyłane, dopóki nie utworzy się połączenia tego typu.
- Sprawdzenie aktualizacji. Dwie wartości — slug wtyczki i numer zainstalowanej wersji — wysyłane pod adres
https://mevvsoft.com/api/v1/license/free-update, gdy WordPress uruchamia własne sprawdzenie aktualizacji, a odpowiedź w pamięci podręcznej jest starsza niż dwanaście godzin. Żadnego adresu witryny, żadnego adresu e-mail, żadnego klucza licencji, żadnej listy wtyczek, żadnych statystyk użycia. Odpowiedź jest podpisana, a niepodpisana zostaje odrzucona. Kopia rozprowadzana przez katalog wtyczek WordPress w ogóle nie zawiera pliku aktualizatora.
Wydawca nie otrzymuje z tej wtyczki żadnej treści wiadomości, żadnych adresów odbiorców, żadnych wpisów dziennika ani żadnej analityki. Dziennik to tabela we własnej bazie danych, a o tym, jak długo jest przechowywany i czy treści wiadomości są w ogóle zachowywane, decyduje użytkownik.
Rozwiązywanie problemów
- Dziennik mówi „wysłane”, ale wiadomość nie dotarła
- „Wysłane” znaczy, że połączenie przyjęło wiadomość, a nie że skrzynka umieściła ją w skrzynce odbiorczej. Najpierw warto sprawdzić spam, potem to, czy adres nadawcy jest w domenie, której rekordy SPF, DKIM i DMARC autoryzują dostawcę, przez którego odbywa się wysyłka. Większość poczty, która znika na tym etapie, to sprawa uwierzytelnienia, a nie dostarczania.
- Wszystko zawodzi na pierwszym połączeniu
- Należy otworzyć wpis i przeczytać własną odpowiedź dostawcy: jest zapisana razem z próbą. Zły port i złe szyfrowanie, wygasły klucz oraz nadawca, którego dostawca nie autoryzuje, odpowiadają za większość przypadków.
- Wiadomość z załącznikiem zawiodła
- Warto sprawdzić, czy w łańcuchu jest połączenie SMTP. Bez niego wiadomość z plikiem celowo zapisywana jest w dzienniku jako nieudana.
- Ponowienia nigdy się nie odbywają
- Dwie przyczyny. WP-Cron uruchamia się tylko wtedy, gdy ktoś odwiedzi witrynę, więc na spokojnej witrynie ponowienie czeka na ruch — albo trzeba przejść na prawdziwego crona serwerowego. Druga to ustawienie „Przechowuj treść wiadomości”: gdy jest wyłączone, nie ma czym ponowić, a nieudany wpis celowo zostaje nietknięty.
- Przycisk „Wyślij ponownie” nic nie zrobił
- Ten wpis zapisano bez treści, więc nie ma czego wysłać. Dla wpisów, które mogą być potrzebne do ponownej wysyłki, należy z powrotem włączyć ustawienie „Przechowuj treść wiadomości”.
- Brakuje ekranów Pro
- Należy sprawdzić, czy darmowa wtyczka jest włączona, czy wtyczka Pro jest włączona i czy licencja jest aktywowana. Wymagane są wszystkie trzy warunki, a ekran licencji mówi, który z nich nie jest spełniony.
Pisząc do nas, warto podać wersje wtyczek, wersje WordPressa i PHP, typ połączenia oraz dokładny tekst odpowiedzi dostawcy z wpisu dziennika. Najpierw trzeba usunąć adresy klientów i treść wiadomości; sama odpowiedź niemal zawsze wystarcza.