Napotkałem dzisiaj ciekawy problem u klienta. W mobilnym Outlooku na smartfonie z systemem Android wyświetlał się błąd podczas dodawania konta pocztowego IMAP. Dane do połączenia były na 100% poprawne, w Gmailu używając tych samych parametrów konto pocztowe dodawało się bez problemu.
Moje pierwsze podejrzenie padło na serwer pocztowy, na którym działa Dovecot. Szybki rzut oka w logi, ale w czasie logowania pojawiał się tylko ogólny komunikat:
Oct 5 10:11:29 mx dovecot: imap-login: Disconnected (no auth attempts in 0 secs): user=<>, rip=<redacted>, lip=<redacted>, session=<dRC9H0Xq/pAlgGEi>
Z poniższego wpisu w logach wynikało, że mobilny Outlook nie próbował uwierzytelniać użytkownika z użyciem loginu i hasła wpisanego przy tworzeniu konta – co wydawało się dość dziwne. Spróbowałem jeszcze różne warianty konfiguracji portów i zabezpieczeń SSL/STARTTLS, ale efekt był zawsze ten sam. Postanowiłem, więc przyjrzeć się sesji inicjowanej przez Outlooka podczas dodawania konta. Użyłem do tego oczywiście narzędzia tcpdump, aby podejrzeć zawartość pakietów. I tutaj wreszcie dowiedziałem się w czym rzecz:
# tcpdump -A host <ADRES_IP_SMARTFONA>
0:14:17.696766 IP <REDACTED> <MAILSERVER>.imap2: Flags [P.], seq 1:43, ack 133, win 66, options [nop,nop,TS val 2626045430 ecr 2421443672], length 42
E..^#.@.-.5/%.a"3M:..........#{%...BM......
..E..TLXA2029 LOGIN <user> "Fd32sfG9#2ssfVn"95"
10:14:17.696886 IP <MAILSERVER> > <ADRES_IP_SMARTFONA>.37140: Flags [P.], seq 133:171, ack 43, win 510, options [nop,nop,TS val 2421443686 ecr 2626045430], length 38
E..ZR.@.@..K3M:.%.a".....#{%...............
.TLf..E.A2029 BAD Invalid characters in atom
Jak widać powyżej, problem okazał się prozaiczny. Hasło użytkownika zawierało cudzysłów („, U+0022 QUOTATION MARK), a Outlook wysyłał hasło do serwera otoczone… cudzysłowami 🙂 Powodowało to błąd „BAD Invalid characters in atom„, a sam Outlook wyrzucał ogólny błąd logowania i kazał sprawdzić login i hasło. Zmiana hasła sprawiła, że problem ustąpił.
Nie wiem jak inne apki pocztowe wysyłają hasło do serwera, ale problem dotyczy tylko Outlooka dla Androida.