Winuser's Blog

19 lipca 2010

Klasa SMTP (Simple Mail Transfer Protocol) z obsługą TLS – wysyłanie email z poziomu C++

Filed under: C++,Programowanie,Projekty — winuser @ 9:29
Tags: , , , , ,

Jakiś czas temu (liczony w miesiącach a może nawet dawniej) potrzebowałem nie skomplikowanej klasy do obsługi wysyłania email poprzez prokół SMTP w języku C++. Ostatnio wraz z kolegą pracujemy nad pewnym projektem no i potrzeba wróciła. Dlatego powstała ta klasa, a w sumie dwie. Jeszcze aby wszystkiego stało się zadość, dodam że klasa ta powstała w oparciu o kod do obsługi SMTP w języku C który znajduje się tutaj http://www.muquit.com/muquit/software/mailsend/mailsend.html Ile kodu skopiowano z wspomnianej wyżej biblioteki mailsend ? Otóż ja niczego nie kopiowałem 😛 Spojrzałem jedynie na jakiej zasadzie to wygląda i zaimplementowałem po swojemu. Tak więc mogę powiedzieć że jestem autorem kodu który tutaj przedstawiam. W zasadzie jest to moje drugie podejście do klasy SMTP, poprzednie mimo że zwieńczone sukcesem to jednak nie obsługiwało TLS, dlatego koncepcja została zmieniona, została napisana klasa Sock która służy do komunikacji TCP, oparta o Winsock 2 i bibliotekę OpenSSL. W tym wydaniu klasy obsługuje ona już m.in gmail.com (czyli połączenie z użyciem TLS) i wszelkie inne typu o2.pl. Całość jest bajecznie prosta, jako że protokół SMTP jest protokołem tekstowym i bardzo łatwo zrozumieć o co w nim wogóle chodzi.

Jeśli chodzi o klasę, to została w niej zaimplementowana tylko podstawowa funkcjonalność SMTP, a więc zalogowanie przy użyciu AUTH LOGIN oraz wysłanie wiadomości. Klasa korzysta z biblioteki OpenSSL, którą należy pobrać i zbudować dla używanego kompilatora, pobrać ją można z pod adresu http://www.openssl.org/ w sieci jest wiele poradników jak budować tą bibliotekę (tak, miałem z tym problem :D). Po wprowadzeniu pewnych zmian, klasa powinna działać również na UNIX`ach (chodzi tutaj głównie o klasę Sock). Dlatego jest *prawie* cross-platformowa 😛 No to tyle.

PS. Nie wyrażam zgody na używanie klasy w komercyjnych projektach. Wszelkie spostrzeżenia i uwagi proszę umieszczać w komentarzach.

Link do kodu  http://www.filefactory.com/file/b2a44bb/n/secure_smtp.cab Niestety jak nie będziecie pobierać to link zdechnie 😉 W razie czego proszę o info.

Musiałem wyedytować ten post, poprzednio kod uploadowałem na serwis fileimport.com, miał być 60 dni ale oczywiście na drugi dzień został usunięty. Tak więc szczerze nie polecam serwisu do hostingu plików fileimport.com !

Dopisek numer2. Zmodyfikowałem kod tak aby możliwe było jego działnie bez biblioteki OpenSSL. Wystarczy zdefiniować globalnie jeden symbol – SLL_ENABLED lub też go nie definiować. Wtedy w zależności od tej stałej będą włączane nagłówki i używane funkcje SSL. Oczywiście po wyłączeniu obsługa np. Gmail.com już nie będzie możliwa.

 

Link do źródła klasy : http://s1.katowice.pl/files/secure_smtp.cab