Discussion:
weryfikacja adresu e-mail
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Stregor
2013-10-29 12:13:22 UTC
Permalink
Cześć.

Stoję przed problemem napisania klasy weryfikującej adres/adresy
e-mail.

Używam Indy 10. Metodyka weryfikacji jest następująca:

1. sprawdzam istnienie "@", rozdzielam adres na użytkownika i domenę
2. za pomocą TIdDNSResolver.Resolve(domena) pytam jakiś serwer DNS o
rekordy MX dla danej domeny (ustawiam QueryType na qtMX)
3. dla każdego znalezionego rekordu MX, za pomocą TIdSMTP robię:
a) Connect
b) wysyłam komendę Hello
c) wysyłam komendę Rset
d) wysyłam komendę Mail from:
e) wysyłam komendę RCPT to:

Na przykład dla home.pl proces się sprawdza. W pkt. 2) jako
TMXRecord.ExchangeServer otrzymuję "post.pl". Ten adres, Przypisany do
Hosta klasy TIdSMTP powoduje, że TIdSMTP.Connect się powodzi i serwer
pocztowy "gada ze mną".

Dla google otrzymuję pięć rekordów - jeden postaci
gmail-smtp-in.l.google.com i cztery z przedrostkami alt1. - alt4. Żaden
ze mną nie chce gadać, na TIdSMTP.Connect otrzymuję Socket Error # 10060
- Connection timed out.

Dla Interii (jeden rekord MX - mx.interia.pl) i Onetu
(mx.poczta.onet.pl) to samo - timeout.

Próbuję na portach 25, 587 i nawet na 465, ustawiając AuthType na
satNone, satDefault.

Adresy rekordów MX są dobre - wnoszę po logu ze stronki
http://www.dnssniffer.com/en/networktools/emailtest/tu-adres-email

jako Mailserwer podaje te same rekordy MX które się przewijają u mnie.

Pytanie - co robię nie tak?
--
Pozdrawiam,
Stregor
g***@ciach.net
2013-10-29 12:46:26 UTC
Permalink
Post by Stregor
Cześć.
Stoję przed problemem napisania klasy weryfikującej adres/adresy
e-mail.
2. za pomocą TIdDNSResolver.Resolve(domena) pytam jakiś serwer DNS o
rekordy MX dla danej domeny (ustawiam QueryType na qtMX)
a) Connect
b) wysyłam komendę Hello
c) wysyłam komendę Rset
Na przykład dla home.pl proces się sprawdza. W pkt. 2) jako
TMXRecord.ExchangeServer otrzymuję "post.pl". Ten adres, Przypisany do
Hosta klasy TIdSMTP powoduje, że TIdSMTP.Connect się powodzi i serwer
pocztowy "gada ze mną".
Dla google otrzymuję pięć rekordów - jeden postaci
gmail-smtp-in.l.google.com i cztery z przedrostkami alt1. - alt4. Żaden
ze mną nie chce gadać, na TIdSMTP.Connect otrzymuję Socket Error # 10060
- Connection timed out.
Dla Interii (jeden rekord MX - mx.interia.pl) i Onetu
(mx.poczta.onet.pl) to samo - timeout.
Próbuję na portach 25, 587 i nawet na 465, ustawiając AuthType na
satNone, satDefault.
Adresy rekordów MX są dobre - wnoszę po logu ze stronki
http://www.dnssniffer.com/en/networktools/emailtest/tu-adres-email
jako Mailserwer podaje te same rekordy MX które się przewijają u mnie.
Pytanie - co robię nie tak?
Tak zupełnie na początek - z maszyny, na której testujesz swój program - zrób telnet na wybrane adresy na port 25. Np. telnet mx.wp.pl 25
Trying 212.77.101.4...
Connected to mx.wp.pl.
Escape character is '^]'.
220 mx.wp.pl ESMTP

To da Ci odpowiedź, czy takie połączenia z tej maszyny mogą być realizowane. Jak masz np. Neostradę, to z niej nie ma wyjścia na port 25, podobnie jest w Netii.
Jeśli takie połączenie się powiedzie - to masz błąd w programie, jeśli nie - to będzie Ci ciężko to obejść. To tak na początek, bo problemów może być jeszcze kilka - np. na porcie 465 - praktycznie zawsze musisz użyć SSL, na 587 - nic nie zrobisz, jeśli nie przeprowadzisz wcześniej autoryzacji itp. itd.
Stregor
2013-10-30 12:15:47 UTC
Permalink
[...]
Post by g***@ciach.net
To da Ci odpowiedź, czy takie połączenia z tej maszyny mogą być
realizowane. Jak masz np. Neostradę, to z niej nie ma wyjścia na port
25, podobnie jest w Netii. Jeśli takie połączenie się powiedzie - to
masz błąd w programie, jeśli nie - to będzie Ci ciężko to obejść.
Rzeczywiście, neostrada, i zablokowany port 25. Że też sam na to nie
wpadłem :) Dzięki za trop. Od kolegi mającego UPC - wszystko śmiga aż
miło, przynajmniej w sensie zasadniczym.
Post by g***@ciach.net
To
tak na początek, bo problemów może być jeszcze kilka - np. na porcie
465 - praktycznie zawsze musisz użyć SSL, na 587 - nic nie zrobisz,
jeśli nie przeprowadzisz wcześniej autoryzacji itp. itd.
Korzystając z okazji dopytam o kilka spraw:
- ten port 587 to zawsze autoryzacji wymaga? Do home-a łączę się bez
problemów na tym porcie, o żadne hasła nie pyta. Zależy to od
konfiguracji serwera (home często jest "inny")? A może autoryzacja
wymagana jest dopiero na jakimś późniejszym etapie (faktyczna wysyłka
maila, a nie samo mail from i rcpt to?
- czy istnieje jakiś zbiór typowych portów które musiałbym sprawdzać,
oprócz 25 i 587? A może "co serwer/serwerek i admin to inny port SMTP
się może zdarzyć"?
- czy poza SSL-em na porcie 465 miałeś na myśli jeszcze jakieś problemy
na które się natknę?
--
Pozdrawiam,
Stregor
g***@ciach.net
2013-10-30 13:17:57 UTC
Permalink
Post by Stregor
Post by g***@ciach.net
To
tak na początek, bo problemów może być jeszcze kilka - np. na porcie
465 - praktycznie zawsze musisz użyć SSL, na 587 - nic nie zrobisz,
jeśli nie przeprowadzisz wcześniej autoryzacji itp. itd.
- ten port 587 to zawsze autoryzacji wymaga? Do home-a łączę się bez
problemów na tym porcie, o żadne hasła nie pyta. Zależy to od
konfiguracji serwera (home często jest "inny")? A może autoryzacja
wymagana jest dopiero na jakimś późniejszym etapie (faktyczna wysyłka
maila, a nie samo mail from i rcpt to?
To jest jeszcze trochę inaczej :) Generalnie serwer działa tak, jak mu
administrator każe i tylko od niego zależy, czy musi być autoryzacja,
na jakim etapie itp. Serwer (np. home.pl) może przyjąć na tym porcie pocztę
do odbiorcy z home.pl - bez autoryzacji, ale może też jej bez autoryzacji
nie przyjąć - ta druga opcja będzie częstsza, bo port 587 (submission) jest
używany właśnie do tego, żeby programy kliencki z jego pośrednictwem wysyłały
pocztę - po autoryzacji. Z założenia każdy serwer poczty musi na porcie 25
przyjąć pocztę do odbiorcy z obsługiwanych przez siebie domen - bez autoryzacji
(w skrócie - bo serwery pocztowe nie autoryzują się między sobą).

I dlatego w twoim przypadku jedynym sensownym rozwiązaniem jest łączenie się na
port 25 (a tu pojawiają się ograniczenia, o których już było wspomniane).
Dodatkowo - wiele serwerów wytnie połączenia z sieci, o których sądzą, że nie
powinno w nich być serwerów pocztowych (np. *.dynamic.costam.pl). Część providerów (tak jak TPSA z Neostradą) zablokuje połączenia na port 25 itd.
Wiele serwerów odrzuci połączenie z kodem 4xx - to jest najczęściej
greylisting, możesz próbować weryfikacji po jakimś czasie (ale praktycznie nigdy nie będziesz wiedział, po jakim to się powiedzie).
Więc musisz pamiętać, że jeśli nie uda ci się zweryfikować adresu email twoim
sposobem, to nie musi oznaczać, że taki adres jest nieprawidłowy.
Post by Stregor
- czy istnieje jakiś zbiór typowych portów które musiałbym sprawdzać,
oprócz 25 i 587? A może "co serwer/serwerek i admin to inny port SMTP
Tak jak napisałem - tylko 25 ma sens. I ten port jest zawsze taki - admin
oczywiście może uruchomić SMTP na np. 26 - ale żaden nie jego serwer nie będzie
wiedział, że na taki port miałby się połączyć :) .
Post by Stregor
- czy poza SSL-em na porcie 465 miałeś na myśli jeszcze jakieś problemy
na które się natknę?
Generalnie - 465 - to taki 25 tylko że z SSL. Ale oczywiście konfiguracja
serwera pocztowego na każdym porcie może być inna.

Loading...