Popsujmy internet, czyli jak zarejestrować niemożliwego maila
Tym razem będzie inaczej, niż zwykle :) But stay with me!
Polskie znaki to wyczyn
Od zawsze, niezmiennie, denerwuje mnie brak obsługi polskich znaków, gdziekolwiek (najwyraźniej nie mam w życiu większych problemów). Nieważne, czy chodzi o koszulki reprezentantów drużyny w piłkę ręczno-nożną, czy wyświetlanie łańcuchów tekstowych w jakimś nowoczesnym języku programowania. Nie chodzi mi tu oczywiście o szacunek do języka polskiego, bowiem z trudem przychodzi mi takowy wykrzesać, a o brak obsługi Unicode’u w 2017 roku. Jest to częstsze, niż się wydaje: czkawki w tym zakresie potrafią dostać PHP, Perl i Python, a przecież stoi na nich cały internet. Użycie litery „Ł” w komentarzu do skryptów instalacyjnych instalatora Anacoda w Red Hacie 7.1 ($799 rocznie) kończy się paraliżem infrastruktury PXE i niediagnozowalnym brakiem możliwości przeprowadzania instalacji nienadzorowanych. Niediagnozowalnym, bowiem logi ulegają zniszczeniu. Przez tę jedną literkę. To tylko jeden z takich urokliwych przykładów.
"ąęśżźćńłó" vs "?????????"
Jest ich rzecz jasna więcej. Wielka Orkiestra Świątecznej Pomocy ma adres wosp.org.pl, ale na przykład wośp.pl i wośp.org.pl należą już do jakichś losowych przychlastów, którzy zapewne czekają, aż organizacja charytatywna zdobędzie jeden respirator mniej, żeby wykupić adres, którego i tak prawie nikt nie używa. Ewentualnie planują go wystawić na aukcję, ale wolę profilaktycznie zakładać ten gorszy wariant. Tak mi podpowiada doświadczenie.
A dlaczego nikt nie używa? Bo wszyscy są dalej głęboko przekonani, że nie wolno używać polskich znaków w adresach internetowych, bo Bozia pokara. Podobnie niektórzy wierzą, że nie można pisać polskich znaków w mailach, bo rączka uschnie. Tymczasem adresy internetowe z chorymi znakami działają już od lat w ramach standardu ICANN, znanego jako Internationalized Domain Name.
IDN pozwala używać więcej niż jednego bajtu na jeden znak, w ramach Unicode’u. Otwiera to możliwości niestosowania stron kodowych, jak w latach 80tych. Należy pamiętać, że Unicode to nie tylko znaki z alfabetów narodowych. Standard rozszerzył się o wiele symboli i piktogramów, oraz o całą pokaźną serię emoji. Więc obecnie, zakładając, że używane oprogramowanie nie jest z mezozoiku i nie ma włączonych 83 warstw zgodności, wpisywanie „niestandardowych” (wg norm z 1976) symboli nie powinno kończyć się konwersją na %HEX w pasku adresu, a zostać poprawnie obsłużone. Polecam przetestować. Cieszy mnie, że Unicode działa w adresach internetowych, bowiem brak jego obsługi jest niewątpliwie stanem odzierającym z godności.
Flagowym przykładem platformy wpadającej w popłoch podczas prób umieszczania choć trochę finezyjnych symboli, jest blog portalu dobreprogramy.pl. Tutaj istnieje co prawda możliwość umieszczania takich ekstrawagancji, jak „Ł”, ale niestety nie uda mi się wstać pełnej nazwy domeny, którą niedawno zarejestrowałem. Oto ona:
Sama przeprawa z rejestracją owej domeny to oddzielna historia, pełna detali technicznych, które pozwolę sobie wyjaśnić gdzie indziej, nie jest to tutaj kluczowe. Jednak po kilku tygodniach walki i wyrzeczeń udało się to i teraz przez kilka lat będę mógł dysponować owym adresem internetowym. Rejestracji dokonałem u dostawcy Gandi.net. Reguły zamawiania ccTLD w Gandi nie są nieskończenie liberalne i niestety nie umożliwiają, w przeciwieństwie do niektórych dostawców, rejestrowania nazw zawierających np. moje ulubione emoji z arbuzem, ale i tak posiadają zdrowy zbiór usług i form rozliczania należności. Nie mam zbyt wiele doświadczenia na tym polu, ale zdecydowanie ich polecam.
Gandi + Usługi poboczne
Poza samą domeną, którą mogę podłączyć do DNS konfigurując strefy i jakiś serwer, Gandi dostarcza podstawowe usługi, takie, jak blog, www czy poczta. Nie ma w tym nic nadzwyczajnego – wszak już od lat wiadomo, że stronę internetową może sobie założyć każdy. Wszystkie owe usługi leżą w Gandi. Można oczywiście kupić od nich serwer i wszystko ustawić samemu. Można także korzystać z gotowców i kupować dodatkowe rozszerzenia. Dzięki temu naprawdę dużo możliwości jest oferowanych w naprawdę przystępny sposób. Stoi to w drastycznej opozycji do innego mojego adresu, który jest „namacalnym” tworem serwera Apache, na debianowej maszynie w OVH, do której mam dostęp jako root. Lenistwo czasem zwycięża i takie ciężkie gotowce wcale nie są złe. Tym razem jednak zastosowałem tryb biedaka i nie kupiłem hostingu, certyfikatów SSL i nic ponad pakiet „bezpłatnych” opcji dostępnym w ramach zarejestrowania mojej postrzelonej domeny. Ma to wszystko swoje meandry, oczywiście. Da się założyć subdomenę na automatycznie generowanego bloga, ale próba stworzenia zwykłej strony internetowej kreatorem Gandi Site już nie działa… z powodu niestandardowych symboli. Oczywiście, wszystkie te problemy znikają, gdy po prostu „jak ludzie” użyjemy zakupionej domeny na własnym serwerze, zamiast bawić się w składanie stron i usług z klocków. I zapewne taki usłyszałbym argument. Ale to, że alternatywa działa lepiej nie oznacza, że wadliwe rozwiązania też zaczynają pracować poprawnie.
IMAP - nowoczesny archaizm
Po względnie akceptowalnym zestawieniu funkcji, natychmiast niezwykle kuszące wydało mi się uruchomienie usługi pocztowej, przysługuje mi bowiem skromne konto e‑mail oraz kilkanaście potencjalnych aliasów. Może nie natychmiast. Wcześniej uruchomiłem nową stronę internetową, co wkrótce potem udało mi się popsuć. Znowu. I tym razem nawet nie z powodu chorych znaków. Po prostu doprowadziłem do kolizji, której usunął się alias serwisowy… Ale to w tej chwili nieistotne. Ważne jest, że kilkoma kliknięciami uruchomiłem swoje konto pocztowe. Od razu rozwieję wątpliwości: mimo swojej nazwy, to konto nie uodparnia na spam. Każdy taki adres jest mapowany na (skomplikowany) ciąg zwykłych znaków ASCII, znaczynający się od „xn‑-”, więc jakiś bot zawsze może go jednak wylosować, choćby grzebiąc w bazie WHOIS. Dostałem już zresztą ocean spam, którego nadawcą był właśnie taki łańcuszek. Jedyne, przed czym taki adres chroni, to przez byciem traktowanym poważnie i przed możliwością bezbolesnego podania go przez telefon. Tym problemem zajmiemy się później :)
Logowanie do poczty przebiega przez bardzo ładny interfejs RoundCube. I mimo, że RoundCube to chyba najlepszy dostępny WebMail, w dalszym ciągu pozostaje jedynie WebMailem, i aby poczta była pocztą, należy obsługiwać ją przez dedykowany program pocztowy. To chyba nie powinien być problem, prawda? Zwłaszcza, gdy użyjemy programu Mozilla Thunderbird, który w przeciwieństwie do np. Outlooka, nigdy nie próbował wynaleźć poczty na nowo i od zawsze starał się przestrzegać standardów. Cóż, przekonajmy się. Thunderbird stosuje inteligentne okno dodawania nowego konta. Po wpisaniu adresu e‑mail, ekstrahowany jest segment oznaczający adres samego serwera, który następnie jest odpytywany o swoje ustawienia. Jeżeli serwer nie umie odpowiedzieć na takie żądanie, odpytywana jest duża baza informacji o dostawcach poczty, dostępna w Mozilli. Bardzo trudno dziś znaleźć dostawcę, którego będzie trzeba konfigurować ręcznie. Nawet uczelniane konta pocztowe poprawnie przechodzą autokonfigurację. W moim przypadku jednak zaczęło się dziać źle już na etapie wpisywania adresu…
Thunderbird rozpoczął próby odpytania serwera o ustawienia poczty, ale ewidentnie nie potrafił zestawić żądania. Wyświetlał animację połączenia, ale nie wykonywał go. W dodatku, zawisł na tak wczesnym etapie, że przycisk „ręczna konfiguracja” pełnił tę samą rolę, co „Anuluj”, więc tak zapisanej nazwy konta zwyczajnie nie dało się dodać do Thunderbirda. Problem wskazywał na błąd w przepływie danych w procedurze wypełniania tego okienka – nikt dotychczas nie próbował testować programu pod takim kątem. Należy więc zastosować plan B. Użyć nazwy mapowanej na płaskie ASCII. W przypadku tej urokliwej domeny, będzie to ciąg „xn‑-oo-7j4ac2n.xn--q9jyb4c”. Ta nazwa jest poprawnie (!) rozpoznawana jako należąca do Gandi i usługa ISP Mozilli oferuje stosowną konfigurację. Bardzo ładnie. Można więc rozpocząć oszukiwanie programu i powoli wpisywać „nielegalne” symbole. Najpierw do pól z nazwą użytkownika, przekazywaną do serwerów IMAP i SMTP. To jeszcze da się zrobić. Natomiast, oczywiście, dotknięcie pola „adres e‑mail” ponownie rozpocznie wyszukiwanie ustawień dla mojej chorej domeny i wróci problem z poprzedniego razu. Dlatego na początku należy zostawić adres ASCII. One oczywiście mapują na to samo, no ale gdzie tu fantazja? Konieczne jest zatem ręczne dodanie właściwej nazwy serwera, po skonfigurowaniu tej „normalnej”. No to jedziemy.
Tutaj niestety przychodzi nam poznać mroczną prawdę. Pole „Adres Email” jest niezdolne do przechowywania danych w formacie Unicode. Początkowo miałem nadzieję, że to tylko kwestia wyświetlania. Niestety, plik z ustawieniami profilu przedstawia się jako zakodowany w „ANSI”, więc utrata treści jest nieunikniona. Z tego powodu nie da się użyć znaków z nazwy mojej domeny. Ani w ramach nazwy użytkownika, ani w ramach adresu serwera. Oczywiście, ktoś mi od razu powie, że przesadzam. Że specjalnie wymyśliłem jakiś najbardziej nieakceptowalny zbiór niemożliwych symboli, tylko po to, żeby psuć losowe programy. Nie mogę się zgodzić z taką „diagnozą”. Jest to bowiem podejście kiepskiego lekarza z dowcipu „Panie Doktorze, boli mnie ręka, jak nią ruszam. – To proszę nie ruszać”. Oczywiście, rozwiązuje to problem. Podobnie nieużywanie takich symboli rozwiązuje mój „problem”. Sęk w tym, że to wszystko jest rzekomo w pełni obsługiwane przez standard IDN, więc powinno bez wahania przyjmować takie i wiele innych symboli.
Rzekomo mądrzy „pragmatycy” odezwą się następnie, że nie ma sensu dorabiać obsługi symboli, których nikt nie użyje. Fakt, tych być może nikt nie użyje. Ale problem nie dotyczy tych konkretnie symboli. Chodzi o jakikolwiek zbiór niestandardowych alfabetów. Nie istnieją one na tym świecie bez powodu – jakaś kultura je stworzyła i jeżeli ktoś mi mówi, że w 2017 roku, gdy na ekranie dotykowym smart-lodówki IoT, automatycznie zamawiającej brakujące mleko sojowe, możemy oglądać strumień live kociąt spadających z parapetu, w jakości 4K, używanie symboli akcentowanych jest „przesadą”, to bez wahania twierdzę, że jest durniem. Zrozumiałbym ten argument, gdybym chciał zarejestrować domenę zawierającą to nieszczęsne emoji z arbuzem (symbol U+1F349). Tymczasem użyłem znaków, które istnieją na czyjejś klawiaturze.
Na pewno pozostaje jeszcze jakaś grupa ludzi twierdzących, że wymyślam głupoty i nie mam co robić w życiu. Każdemu jej przedstawicielowi chciałbym zaoferować tabliczkę „no fun allowed”, do umieszczenia na drzwiach wejściowych. Wiem, że wszyscy są na pewno bardzo zapracowani i strudzeni żywotem. Stąd też chyba trzeba im przypominać, że nie wolno im się uśmiechać.
Zarro boogs found
Dlaczego tak zapalczywie zbroję się przed konfrontacją z dezaprobatą? Nie chodzi tu o polemikę z potencjalnymi komentarzami do wpisu. Powodem jest co innego: konieczne jest przygotowanie do wyprawy w rejony mroczniejsze nawet od sekcji komentarzy w Internecie. Rejony, z których nikt śmiertelny nie powrócił jeszcze bez ciężkich ran, zadanych biczem arogancji. Mowa o Bugzilli. Musimy przecież być porządnymi ludźmi i zgłaszać błędy w oprogramowaniu Open Source.
Moje doświadczenia z systemami śledzenia błędów Red Hata, GNOME i Mozilli są zbieżne i pozwalają założyć, że jest to specyfika każdej Bugzilli: autorzy oprogramowania podchodzą do swoich projektów ambicjonalnie. Gdy pojawiają się błędy wywołane przez jakiegoś „pana Mądrego”, narzekającego na przykład, że w formularzu webowym nie da się używać w haśle sygnału wysyłanego przez przycisk F5, bo strona się wtedy odświeża (to ja), często przed poprawką sypią się gromy. Podobnie jest z niepopularnymi decyzjami: usuwanie opcji przezroczystości z Terminala GNOME prawie zaowocowało konfliktem zbrojnym, a niektóre dyskusje, swym płomiennym stylem, rozpala okresowo sam Linus Torvalds. Mając to na uwadze, wstąpiłem na panel bugzilla.mozilla.org z niepewnością, ale i z nadzieją. Może tym razem będzie lepiej? A może… ktoś już zgłosił ów błąd dawno temu?
Poszukiwania fraz „Thunderbird IDN” dają dwa wyniki, w tym jeden nieoznaczony jako duplikat drugiego, wskutek przeoczenia (to bardzo częste). Istnieje jednak błąd numer 923043, opisujący problem z utratą spójności danych w przypadku korzystania z IDN. Błąd jest związany z problemem w innym miejscu, czyli dokładnie z tym, o czym wspominałem podczas walki z oknem dodawania nowego konta pocztowego. Błąd 235312 dotyczy braku możliwości stosowania symboli UTF‑8 w nazwie serwera i użytkownika. Świetnie, a więc ktoś już nad tym pracuje. Istotne, pracuje. Od 2004 roku! Problem okazuje się „odłamkowo” zależeć od bardzo wielu niezwiązanych ze sobą miejsc i wymaga sporego nakładu pracy oraz rzadkiej wiedzy z zakresu przekrojowej znajomości kodu całego Thunderbirda. Rozwiązania dalej nie ma, biurokratycznie zidentyfikowano nawet API, które posiada brakujące implementacje (błąd numer 1034658), istnieje nawet meta-błąd (tracking bug) o nazwie „IDN”, poświęcony temu właśnie zagadnieniu, frustrująco oznaczony jako „RESOLVED INCOMPLETE”. Rok pochodzenia to również 2004.
Mail clients from hell
Najwyraźniej więc każdy program pocztowy posiada jakiś kluczowy, nierozwiązywalny od dziesięcioleci problem. Outlook też ma ich sporo. Jego kompletna niekonfigurowalność niektórych zachowań, dawne problemy z absurdalną obsługą załączników (ktoś pamięta pliki ATT00001.txt?) i rażące braki w interoperacyjności to z kolei coś, czego nie ma w Thunderbirdzie. Po prostu, jak zwykle, musimy wybrać swój podzbiór wyrzeczeń. Ale jeżeli już jesteśmy przy Outlooku, zobaczmy, jak program z pakietu za 399PLN rocznie sobie poradzi.
Niespodzianka! Wszystko działa bez zarzutu. Jestem poważnie zaskoczony, ponieważ Outlook specjalizuje się w byciu pasmem rozczarowań. Wielokrotnie próbowałem do niego wracać, ale za każdym razem kończyła mi się cierpliwość i powracałem do Thunderbirda. Niestety, w przypadku mojego nowego, drogocennego konta pocztowego, Thunderbird ewidentnie nie daje sobie rady. Smutno mi. Mam do niego podpięte bardzo wiele rzeczy, nie porzucę go też na rzecz Outlooka, bo wiem, że ów wkrótce ponownie wyprowadzi mnie z równowagi.
"Standards are paper"
Ogółem, obsługa IDN przez programy pocztowe jest nierówna. Udałem się na przegląd oprogramowania pocztowego, aby zobaczyć, jak wygląda obsługa IDN. Zanim o nich wspomnę, zajrzę jeszcze do standardów RFC. No i dochodzę do następujących wniosków: o ile nazwa domeny jest poprawna, to RFC 5322 zwyczajnie nie zostało zaktualizowane pod kątem durnych pomysłów. Rozdział 3.6.2, opisujący pole „From” nic nie wspomina o kodowaniu. Informacja o domenie, która pada w innych rozdziałach, zawiera (poza bezwstydnymi odniesieniami do innych standardów) następujące zdanie:
„It is therefore incumbent upon implementations to conform to the syntax of addresses for the context in which they are used.Powinna to być więc kwestia implementacji.
Co ciekawe, GMail twierdzi inaczej. Gdy uda się wypchnąć nadawcę z moimi znaczkami (na przykład używając programu GNOME Evolution 3.22), GMail odrzuca takiego maila, mówiąc „header has non compliant domain name”. W tym przypadku to nie prawda, a zwykła wymówka. Sprawa jest jednak ciekawsza. Gdy użyje się domeny „xn‑-oo-7j4ac2n.xn--q9jyb4c” (tak postępuje WebMail od Gandi), GMail już przyjmie takiego nadawcę, a następnie… złoży w domenę Unicode po stronie klienta Web. Więc będzie udawać, że wszystko przebiegło poprawnie, tak długo jak pod spodem komunikacja przebiega w tradycyjny sposób. Google zatem wszystko musi przemalować na nowoczesne barwy, nawet, jeżeli to tylko atrapa.
Ale polskie o2.pl już bez problemu potrafi przetworzyć taką wiadomość! Pojawiła się od razu w mojej skrzynce odbiorczej. Z tym, że musiałem ją otworzyć przez WebMail Tlen.pl, bo Firefox nie umiał jej pobrać, zgłaszając zero nowych wiadomości :D Zatem udało mi się znaleźć rzadki przykład funkcji poprawnie zaimplementowanej u mniejszego dostawcy, a popsutej u wielkiego GMaila.
Z programami pocztowymi sprawa jest jeszcze bardziej skomplikowana. Wspomniałem już, że WebMail od Gandi pod spodem używa tylko symboli ASCII. Dzięki temu poczta wysłana z niego dotrze zawsze. Thunderbird daje się skonfigurować tylko z ASCII, bo traci IDN już na etapie własnych plików konfiguracyjnych. GNOME Evolution 3.22 potrafi wysłać z nagłówkiem IDN, przez co nie potrafi go odebrać GMail, ale taki o2.pl już tak. Słodki mały program o nazwie „Sylpheed” bardzo ładnie pokazuje, co się dzieje i nie pozwala wysłać maila z nadawcą IDN, mówiąc to samo, co GMail: że format nadawcy jest nieprawidłowy. Pozostaje porównać logi Evolution i Sylpheed, aby zobaczyć, jakaż to magia zachodzi pod spodem, że jeden z nich potrafi, a drugi już nie. Otóż… Evolution przerabia adres na ASCII (tak zwany „punycode”). Zaraz zaraz, co? Coś przegapiłem? Zdążyłem się pogubić? Skoro nazwa jest deserializowana na ASCII, jakim cudem udaje się wysłać „robaczki”? Cóż, istnieje tylko jednak metoda, żeby się przekonać: ustawić w Evolution dwa konta. Jedno ASCII, drugie IDN, wysłać maila na GMail i porównać logi.
Oczywiście, logi są identyczne. Pozornie prowadzi to do ślepej uliczki, ale teraz udaje się już poskładać fakty: operacja „MAIL FROM” to nie to samo „From”, które jest w treści maila. To pierwsze zawsze musi być prostym tekstem. Dlatego Claws sobie nie radzi: taki zapis faktycznie jest niezgodny ze standardem, ale o tym informuje już serwer pocztowy Gandi. A więc wszystko w porządku. Evolution wysyła poprawnego maila, to GMail stroi fochy. Bowiem GMail najwyraźniej zwraca uwagę na drugie „From”. A to już jest różne. Płaska wersja przechodzi, pstrokata się wywala. Z pomocą przyszedł mi ten tutorial: https://www.port25.com/how-to-check-an-smtp-connection-with-a-manual-t....
Chodźmy już spać lepiej
Morał z tego taki, że konto najlepiej, niestety, konfigurować jako ASCII. Wszelkie standardy spełnia (nieziemsko zbugowany zresztą) GNOME Evolution 3.22 + adresat inny, niż GMail. Straty wielkiej w tym nie ma. Maile nadawane pod chory adres dalej będą przychodzić, a odpowiedzi na nie i tak często miewają spłaszczany nagłówek nadawcy. Pozostaje jednak ideologiczny ból istnienia. GMail na pewno nie poprawi swojej implementacji. Takie zgłoszenie zostałoby bowiem oznaczone nie jako CLOSED WONTFIX, a CLOSED INSANE.
No to jeszcze ostatnia kwestia. Jak komuś podać takiego maila? Jest on wręcz zaprojektowany pod kątem sprawiania problemów. Oczywiście, zwraca uwagę, a to może być w pewnych okolicznościach zaletą. Należy więc stworzyć wizytówkę z QR kodem. Udajemy się więc na stronę https://www.unitag.io/qrcode i rozpoczynamy wypełnianie naszych danych. Oczywiście, QR kody są nudne, ale ten QR nie ma prawa być nudny, z racji treści, jaką niesie. Dlatego trzeba trochę pomajstrować przy dzynglach ustawień.
Następnie należy sięgnąć po Microsoft Publisher, wybrać schemat „wizytówka” i… gotowe.
Uf. Chwilowo nie mam w zanadrzu żadnych nowych chorych pomysłów. Muszę trochę odczekać :)
Addendum
Co do Unicode, to jeszcze słowo na dobranoc: niechaj każdy, kto dopisuje długopisem akcenty na wydruku z Worda, bo nie umiał ich wstawić, nadepnie w nocy bosą stopą na Lego.