„Że blog na WordPressie – bułka z masłem!” – pomyślałem jako przyszły admin Zaufanej Trzeciej Strony. Jednakże tysiące linijek kodu w PHP szybko zweryfikowały moje umiejętności i już wiem, że tak prosto z obsługą WP jednak nie jest. W serii „Jak rozwaliłem…” (oby jednoodcinkowej) będę opisywał moje błędy popełnione na produkcyjnej Zaufanej, które mogły poważnie wpłynąć na dostępność strony lub, jak w tym wypadku, na kontakt z Adamem Hantele.
W Zaufanej wierzymy, że liczy się transparentność, a Czytelnicy zasługują na wyjaśnienia. Za to ci bardziej techniczni Odwiedzający dodatkowo będą mogli się ze mnie pośmiać (albo zweryfikować konfiguracje swoich instancji WordPressa 😜).
Zarys teoretyczny (bez wyprowadzeń wzorów)
Usterka dotyczyła formularza kontaktowego Zaufanej Trzeciej Strony. Wszystkie zgłoszenia między 21 grudnia 2023 a 9 marca 2024 były przyjmowane przez nasz system, ale nie były przekazywane dalej na skrzynkę mailową Adama. A że nikt do systemu (tak naprawdę zakładki „Zgłoszenia”) nie zaglądał, formularze pozostawały bez odpowiedzi. Wszystko to zaczęło się od…
Migracja
…wielkiej migracji między starym a nowym serwerem Zaufanej. Wtedy też zauważyłem, że stara instancja wysyła maile przez lokalnie zainstalowanego Postfixa. To rozwiązanie mnie średnio zadowalało, gdyż:
- IP serwera dedykowanego musiało być publicznie dostępne w DNS-ach, a przecież nie po to Cloudflare chroni nasz adres, żebyśmy jednym rekordem go ujawniali.
- Gdyby z jakiegoś powodu nasz adres IP trafił na listę abuse, moglibyśmy mieć problemy z doręczalnością poczty.
- Rzeczy takie jak poczta wolę outsourcować profesjonalistom – nie muszę się przez to obawiać ewentualnych dziur w pakietach Postfixa oraz zastanawiać, czy automatyczna aktualizacja paczki już się uruchomiła, czy może dopiero ruszy za chwilę.
Zarządziłem więc zmianę konfiguracji poczty i od grudnia 2023 roku za wysyłanie powiadomień z WordPressa Zaufanej odpowiada usługa AWS Simple Email Service.
Bolączka WP: pluginoza
Wbrew pozorom „goły” WordPress potrafi niewiele: nie ma żadnych ustawień dotyczących SMTP (można sobie je łaskawie nadpisać w plikach motywu w functions.php
…), brakuje tagów OpenGraph do generowania ładnych embedów na Twitterach czy innych Discordach, a podgląd obrazków w formie przesuwalnej galerii nie istnieje (opcja „Rozwiń po kliknięciu” nie jest wystarczająca). Każdą z tych drobnych rzeczy należy tegować wtyczką bądź wtyczkami, a jedna jest gorsza od drugiej.
Mam wrażenie, że autorzy wtyczek walczą nawet nie o pieniądze autorów blogów, co po prostu z samymi autorami, aby ich życie było jeszcze smutniejsze niż dotychczas…
Instalujesz naszą wtyczkę, a chcesz jeszcze pięć innych? A może pokazać ci zresetowaną konfigurację w zakładce ustawień, mimo że de facto w bazie danych jest inaczej? A logi błędów? Paaaanie, zapłać pan albo kliknij super ukrytą zakładkę, to może wtedy.
Wtyczka Easy WP SMTP (oprócz utrudniania dostępu do logów, o czym za chwilę) w zasadzie działa OK. Przy jej początkowej konfiguracji zaznaczyłem kilka opcji, które przypadkiem naprawiały problem – nadpisywanie nagłówków FROM.
Takie ustawienia, choć prawidłowe i bezpieczne, przeszkadzały w łatwym odpowiadaniu na Wasze zgłoszenia. Przed migracją, gdy Adam otrzymywał kopię zgłoszenia na swojego maila, to adres do odpowiedzi znajdował się zawsze w polu FROM. W związku z tym, jeżeli pole FROM nie jest nadpisywane przez wtyczkę zgłoszeń (czyli wynosi np. [email protected]), to nie wiadomo, kto wysłał zgłoszenie i trzeba sięgać do logów we wtyczce.
Problem w tym, że przed migracją myk z ustawianiem fałszywego pola FROM by przeszedł – w końcu to my operowaliśmy Postfixem, więc można było tam ustawić prawie wszystko. Sytuacja się zmieniła, kiedy zaczęliśmy korzystać z usług zewnętrznych. SES (zresztą słusznie) wymaga weryfikacji domen, które mają się znajdować w polu FROM. Na tym właśnie poległem.
O swoim błędzie dowiedziałem się przypadkiem, kiedy w ramach akcji usuwania nadmiernej liczby wtyczek z Zaufanej zacząłem głębiej zaglądać w różne opcje. Easy WP SMTP ma kilka zakładek. W której z tych poniżej znajdują się logi?
Treść błędów wyglądała następująco:
Mailer: Other SMTP
SMTP Error: data not accepted.SMTP server error: DATA END command failed Detail: Message rejected: Email address is not verified. The following identities failed the check in region EU-NORTH-1: „[email]” , [email]
SMTP code: 554
Caller
Plugin: Ninja Forms
/var/www/html/wp-content/plugins/ninja-forms/includes/Actions/Email.php (line: 98)
Jak widać, SES nie pozwala na niezweryfikowane adresy w polu FROM. Tylko co mogło nam modyfikować to pole? Po chwili główkowania przypomniałem sobie feralną migrację i ustawianie SMTP. Ale zaraz, przecież formularz kontaktowy testowałem i wszystko działało! Kłopot w tym, że e-mailem testowym był adres, który już w AWS SES wcześniej zweryfikowałem. Widocznie wymyślenie fejkowego adresu do podania w testach formularza było dla mnie za trudne…
Stop! Młotu czas!
W tej samej zakładce „Debug events” znajduje się opcja, która powinna nas przed tym wszystkim ochronić. Informacja o błędzie wysyłana na maila administratora – tego nam było trzeba! Opcja jest nie dość, że domyślnie włączona, to jeszcze nie można jej wyłączyć. Hurra?
Niestety nie hurra, Pan Hantle żadnego maila o błędzie nie dostał, ale za to bezużyteczne statystyki tygodniowe wpadały cały czas.
Tory były złe i szyny, a podwozie to w ogóle
Ostatecznie wszystko udało się naprawić. Z panelu SES-a usunąłem swój adres mailowy jako zweryfikowany, gdyby znowu mi się zachciało robić testy ze swoimi danymi. Pola FROM ustawiłem na adresy Zaufanej, a pola REPLY-TO na adresy e-mail zgłaszających. Tak, pola nadawcy maila oraz ten wskazujący, do kogo wysłać odpowiedź, mogą być różne, ale to pewnie już wiedzieliście.
Mam nadzieję, że nie będę musiał pisać kolejnego Post Mortem. Chociaż Zaufana teraz to odrobinkę plac budowy – pewnie nowy wygląd już zauważyliście (jest cudowny), to sporo się dzieje „pod maską”. Myślę jednak, że z moim szczęściem już wkrótce przeczytacie kolejny odcinek „Jak rozwaliłem…”. Przynajmniej będzie zapewniony „kątęt” do czytania i analizy, tak jak Cloudflare słynący ze swojej transparentności w swoich write-upach.
A propos, dzień po mojej wpadce Cloudflare zdegradował wszystkich swoich płacących klientów do planu darmowego i walczył z tym kilkanaście godzin. Przypadek? Pewnie tak.
Komentarze
Poproszę odcinek o migrowaniu z super hiper zajebistego serwera, o różnicach międy domenami com a narodowymi, niedziałąjących statach analytics oraz o tym jak pozostać zalogowany/ą na stronie, jeśli się niefrasobliwie przechodzi z zaplecza na główną.
Podbijam!
Oho, czyżby jakaś wojna wewnątrz Z3S?
Szeregowi pracownicy szczekają, Dział IT jedzie dalej.
Podbijam!
Pytanie zasadnicze do autora:
WHO is Adam Hantel???
Nie znam żadnego Adama Herakle.
„W serii „Jak rozwaliłem…” (oby jednoodcinkowej) będę opisywał moje błędy popełnione na produkcyjnej Zaufanej, które mogły poważnie wpłynąć na dostępność strony lub, jak w tym wypadku, na kontakt z Adamem Hantele.”
😁
Absolutnie nie znam człowieka 😜
To najprawdopodobniej kuzyn Adama Snorkle.
PS A Wasza wtyczka do wykrywania zduplikowanych komentarzy jest lekko za czuła.
Po prostu ręcznie wszystko do akceptacji idzie. :)
WHO – samo zło!
podszywanie się w mailach pod userów (nadawców) to ZŁO i powinno być karane – walczę z takimi case’ami u siebie w firmie…
jeśli nadawca i odbiorca to 2 różne serwery pocztowe, to takie brzydkie maile nie przejdą choćby SPFa i trzeba robić wykluczenia…
pomysł z reply-to dużo sensowniejszy :)
P.S. ten formularz nie obsługuje maili z „+” – RFC się smuci…
Testowy mail „[email protected]” przeszedł mi OK. 🤔
Bo na serwerze docelowym nie macie poprawnie zrobionego sprawdzania SPF/DKIM/DMARC
Ale który serwer masz na myśli jako „docelowy”? Wszystkie wiadomości trafiają na Gmaila. Halo otpiur, Google?
Jako adres FROM dałeś jakiś adres gmail’owy i jako adres TO też dałeś inny gmail’owy? BO to by było bardzo dziwne żeby to przeszło.
Przed moimi zmianami dowolne pole FROM dostarczane Gmailowi przechodziło podobno normalnie. Może był filtr, aby takich wiadomości nie kierować do SPAMu, co naturalnie powinno się dziać.
u mnie niestety ne funguje „+”
ale tylko w formularzu komentarzy
puściłem screena formularzem kontaktowym
Faktycznie, będzie zategowane. Dzięki!
Ale litości czemu WordPress?
Bo ładny jest :)
Może i całkiem ciekawy tekst, ale sorry, tytuł kompletnie z d**y. Cały czas liczyłem że wtyczka kompletnie namieszała w SQL, albo w plikach WordPressa coś popsuła, a tu nic a nic. Taki o poprostu felieton o tym że mieliście złą konfigurację wtyczki od wysyłania maili i w sumie to tylko nie dochodziły te maile.
Zarządzam dwiema stronami na wordpressie i moja reakcja po przeczytaniu tego felietonu to: 🤨
PS. Sprawdźcie sobie „WP Mail SMTP”
Należy jednak zauważyć, że powiadomienia mailowe o problemach z dostarczaniem poczty również nie działały (czemu?). Ta cała wtyczkozzza w ekosystemie WordPressowa jest męcząca – takie ustawienia powinny być IMHO wbudowane.
Wtyczki do WordPressa bywają koszmarne w utrzymaniu, a wsparcie zwykle mamy wyłącznie do najnowszych ich wersji. To nie jest wcale najgorsze. Najgorsze są te, które przechodzą przez wp-admin i tym samym wymagają wystawienia admin-ajax do internetu.
Czasami wtyczka robi coś prostego, na przykład zmienia tylko kilka linijkek w wp-config.php i wcale nie trzeba jej instalować. Wystarczy te linijki doposać. Warto się rozejrzeć i ograniczyć ilość wtyczek, proponowanych jako świetne rozwiązanie przez wcale niesponsorowane, techniczne blogi na temat seo i hostingów.
Tak, można sobie poprawić PHPMailera, ale założyłem początkowo że wtyczka „zrobi to lepiej”. Nie zrobiła, więc docelowo pewnie wyleci. ¯\_(ツ)_/¯
FluentSMTP polecam, nie ma wersji płatnej, są fallbackowe serwery SMTP, powiadomienia o problemach, opcjonalnie logi wysłanych wiadomości
Jestem winny Ci piwo.
A nie dałoby się tego obejść wstawiając w nadawcę maila np. w konstrukcji [email protected] (wtedy nie będą się wątkować z noreply) a oryginalny mail użytkownika zostawić w reply-to? Wtedy dałoby się też podejrzeć „w miarę” wygodnie adres nadawcy bez rozwijania dropdownów. No chyba, że SES wymaga potwierdzenia adresu nawet w zweryfikowanej domenie…
i po raz kolejny potwierdza się, że WP nie jest narzędziem dla zwykłego śmiertelnika, a jedynie narzędziem umożliwiającym magikom z latami doświadczenia i setkami jeśli nie tysiącami obsłużonych WP stworzenie CMS-a dla klienta
wybranie odpowiedniego motywu i wtyczek tak, żeby robiły co trzeba, ale robiły to dobrze i szybko to nie jest coś, co można zrobić w jeden dzień bez wcześniejszego doświadczenia
można się na tym nieźle przejechać
Najciekawszy kawałek to ten że kontakt był testowany tylko akurat na potwierdzonym adresie.
Morał jest taki żeby nie testować akurat na potwierdzonym adresie.
Ten artykuł można by jeszcze rozszerzyć o to jak bezpiecznie wysyłać takie maile z formularzy na WordPress. Mam na myśli poprawną konfigurację SPF, DKIM, DMARC.
tak to jest jak sie uzywa php
https://www.youtube.com/watch?v=sDQvMaFTiWY
https://zaufanatrzeciastrona.pl/pl/ która często wypluwa wyszukiwarka też Wam nie działa.
Przywróćcie poprzedni czytelniejszy i lepszy wygląd strony.
Polecam jednak napisać kilka linijek kodu (dokładnie 10) z autoryzacją SMTP do motywu lub własnej wtyczki do wysyłki maili, chyba, że masz wymuszoną autoryzację z wykorzystaniem oAUTH. W innym wypadku nadmiarowość kodu jest bezzasadna. Część hostingów ma dobrze oprogramowaną funkcję php mail więc wtedy w WP działa wysyłka out of box. Temat galerii zależy od motywu – ja rozumiem, że mamy Gutenberg, ale nie wymuszałbym galerii czy jakichś lightboxów w standardzie. Obsługa styli embedowanych materiałów to też rola obsługi przez motyw. żeby nie było WP ma masę bolączek i jego zalety są często równocześnie jego największymi wadami, ale
SMTP jest zategowane obecnie inną wtyczką (FluentSMTP), która potrafi poprawnie informować nas o błędach (a to dość ważne, więc wyjdzie więcej niż 10). Z embedami się nie zgodzę i uważam, że powinny być do ustawiania w WP, tak samo jak w GhostCMS. :D A hosting to serwer dedykowany, więc obsługa poczty ciut trudniejsza. Komentarz chyba Ci ucięło. :(