Protokol SMTP byl vytvoren nekdy kolem roku 1980 a popsan v RFC 821 (http://www.ietf.org/rfc/rfc821.txt) - obsahoval prikazy HELO, MAIL, RPCT, DATA, SEND, SOML,SAML,RSET, VRFY, EXPN, HELP, NOOP, QUIT, TURN. Toto RFC bylo nahrazeno RFC 2821 (http://www.ietf.org/rfc/rfc2821.txt) v roce 2001 (ovsem specifikace SMTP protokolu popsane zde se urcite pouzivala jiz mnohem drive nez v roce 2001). Prikazy teto upravene specifikace jsou: HELO, MAIL, RCPT, DATA, RSET, VRFY, EXPN, HELP, NOOP, QUIT.
Format hlavicek a dat (zadavanych po prikazu DATA) je popsan v RFC 822 (http://www.ietf.org/rfc/rfc822.txt), respektive RFC 2822 (http://www.ietf.org/rfc/rfc2822.txt).
Dalsim vyznamnym dokumentem je RFC 1869 (http://www.ietf.org/rfc/rfc1869.txt), ktery popisuje rozsireni SMTP protokolu. Tento dokument popisuje standartni cestu, jak rozsirit SMTP protokol o nove prikazy, nebo pridat dodatecne parametry ke stavajicim prikazum. Chce-li klient pouzivat toto rozsireni, ohlasi se mail serveru EHLO (namisto puvodniho HELO). Mail server bude toto rozsireni podporuje a odpovi stavem 250 a vetsinou i seznamem podporovanych rozsireni, nebo ne a pote odpovi stavem 5xx
ukazka pripojeni se na server s podporou ESMTP.
vysvetleni jednotlivych prikazu:
EHLO / HELO fqdn (plne domenove jmeno) / tzv. address literal (vice bod 4.1.3 v RFC 2821) : prvni prikaz SMTP relace, v niz se klient identifikuje serveru a server jako odpoved vraci informace o podporovanych rozsirenich
MAIL FROM: <emailAddress>: emailova adresa odesilatele, vetsina SMTP serveru akceptuje adresu i bez <>. Musi se v kazdem mailu objevit aspon jednou.
RCPT TO: <emailAddress>: emailova adresa kam se mail posila, vetsina SMTP serveru akceptuje adresu i bez <>. Muze byt pouzito vicekrat.
DATA Zahajuje vkladani obsahu mailu. Text muze byt jako prosty text, binarni data jsou vkladana v nejakem kodovani. Ukoncuje se enter . enter
QUIT Ukoncuje SMTP relaci
RSET prerusi aktualni transakci a vrati relaci do stavu po HELO/EHLO
NOOP nema vliv na zadne predchozi prikazy, server pouze odpovi 250 OK
VRFY emailAddress: overi, zda emailova adresa je pro dany SMTP prijatelna = server je ochoten ji dorucit
EXPN emailAddress: zjisti zda cilova adresa je mailing list, zrejme se moc nepouziva, napr. u mne na POSTFIXu neni tento prikaz implementovan
SMTP prikazy jsou serverem zpracovany jako case-insensitive
ukazka odeslani mailu pres smtp server bez autentifikace
Ted se zamerim na jedno konkretni rozsireni SMTP protokolu. A to konkretne o Autentizacni sluzbu (Authentication service extension). Je popsana v RFC 2554 (http://www.ietf.org/rfc/rfc2554.txt). Server, ktery podporuje toto rozsireni nam jako jednu z odpovedi na EHLO vrati napr. toto:
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
Cili seznam pouzitelnych autentizacnich mechanismu na tomto serveru. Umozni nam tedy pomoci nejakeho uzivatelskeho jmena a hesla overit identitu uzivatele, ktery se pokousi pres tento server odeslat zpravu a jeste pomoci rozsireni prikazu MAIL FROM o klicove slovo AUTH umozni autorizovat jednotlive odesilane zpravy. Komunikace mezi serverem a klientem probiha jako serie vyzev serveru a odpovedi klienta. Vse je kodovano base64 kodovanim.
Base64 encode/decode funkce muzete nalezt zde: http://makcoder.sourceforge.net/demo/base64.php