Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <winsock2.h>
- #include <ws2tcpip.h>
- #include <iphlpapi.h>
- #include <stdio.h>
- #include <iostream>
- #include <stdlib.h>
- #include <conio.h>
- #include <errno.h>
- #pragma comment(lib, "Ws2_32.lib")
- using namespace std;
- void wyswietlanie_linii(char *wskaz, int i);
- int main() {
- printf("Program czyta naglowek komunikatu e-mail i usuwa wszystkie wiersze,\n ktore nie zaczynaja sie slowami: FROM, TO, SUBJECT, CC\n");
- //instalacja winsocka
- WSADATA wsaData;
- int iResult; // przechowywać będzie dane na temat powodzenia lub porażki.
- // Inicjalizacja Winsock. MAKEWORD służy do sprawdzenia wersji winsocka. Jeżeli rezultat
- //będzie posiadał inną wartość niż 0 będzie to oznaczało błąd przy inicjalizacji WSA.
- iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
- if (iResult != 0) {
- printf("Nie powiodlo sie %d\n", iResult);
- return 1;
- }
- struct addrinfo *result = NULL, // Struktura, która przechowywać będzie informacje
- *ptr = NULL, // potrzebne do połaczenia się z siecią
- hints;
- ZeroMemory( &hints, sizeof(hints) ); // Wypełnia nam zerami hints
- hints.ai_family = AF_UNSPEC; // Stała AF_UNSPEC oznacza, że kożystamy z TCP/IP
- hints.ai_socktype = SOCK_STREAM; // ustalenie typu protokołu na strumieniowy
- hints.ai_protocol = IPPROTO_TCP; // protokół TCP
- #define DEFAULT_PORT "110" // Ustawienie portu
- //pobranie adresu poczty. Jeżeli rezultat
- //będzie posiadał inną wartość niż 0 to socket nie połączy się z pocztą.
- iResult = getaddrinfo("poczta.o2.pl",DEFAULT_PORT,&hints,&result);
- if (iResult != 0) {
- printf("socket nie polaczyl sie z poczta %d\n", iResult);
- WSACleanup();
- return 1;
- }
- //tworzymy socketa odbierajacego i wysylajacego dane
- SOCKET ConnectSocket = INVALID_SOCKET;
- ptr=result; // Sprawdzanie czy socket działa
- ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, // poprawnie, by móc spokojnie
- ptr->ai_protocol); // połączyć się z pocztą
- if (ConnectSocket == INVALID_SOCKET) {
- printf("socket odbierajacy cos z poczty nie dziala: %ld\n", WSAGetLastError());
- freeaddrinfo(result);
- WSACleanup();
- return 1;
- }
- //laczenie sie z serwerem. Iresult przyjmuje wartość połączenia się z pocztą
- // W razie nie powodzenia przyjmuje wartość SOCKET_ERROR i socket zostaje zamknięty.
- // ConnectSocket przyjmuje wartość INVALID_SOCKET.
- iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
- if (iResult == SOCKET_ERROR) {
- closesocket(ConnectSocket);
- ConnectSocket = INVALID_SOCKET;
- }
- //Sprawdzanie wartości w strukturze, ale także czy ConnectSocket równa się INVALID_SOCKET
- // jeśli tak to nie połaczono się z pocztą.
- freeaddrinfo(result);
- //spr czy sie polaczyl
- if (ConnectSocket == INVALID_SOCKET) {
- printf(" Nie polaczylo sie z poczta\n");
- WSACleanup();
- return 1;
- }
- char recvbuf[2020] ={0}; // tablica wyzerowana przechowująca, które w późniejszym
- // toku programu zostaną wprowadzone.
- iResult=recv(ConnectSocket, recvbuf, sizeof(recvbuf),0); // uzyskanie odpowiedzi od serwera
- recvbuf[iResult]=0;
- //logowanie do poczty. Wysłanie loginu i otrzymanie odpowiedzi "+" gdy login będzie poprawny.
- iResult = send(ConnectSocket,"USER poczta_sieci\r\n", (int)strlen("USER poczta_sieci\r\n"), 0);
- iResult = recv(ConnectSocket, recvbuf, sizeof(recvbuf), 0);
- printf("%s\n", recvbuf);
- if(recvbuf[0]='+')
- printf("Poprawnie zweryfikowano login\n");
- //wyslanie hasla. Tak samo jak w przypadku loginu.
- iResult = send(ConnectSocket,"PASS pocztasieci\r\n", (int)strlen("PASS pocztasieci\r\n"), 0);
- iResult = recv(ConnectSocket, recvbuf, sizeof(recvbuf), 0);
- printf("%s\n", recvbuf);
- if(recvbuf[0]='+')
- printf("Poprawnie zweryfikowano haslo\n");
- //STAT sprawdza ile masz wiadomosci.
- iResult = send(ConnectSocket, "STAT\r\n", (int)strlen("STAT\r\n"), 0);
- iResult = recv(ConnectSocket, recvbuf, sizeof(recvbuf), 0);
- printf("%s\n", recvbuf);
- int ile_maili=1; // ilość wiadomości, dla których chcemy wykonać późniejsze operacje
- int a=1; // zmienna pomocnicza
- char tablica[40]; // tablica przechowująca informacje o numerze wiadomości
- while(a<=ile_maili){
- //RETR ściąga wiadomość o podanym numerze
- sprintf(tablica,"RETR %d\r\n",a); // scalenie polecenia z numerem wiadomości
- iResult = send(ConnectSocket, tablica, (int)strlen(tablica),0);
- iResult = recv(ConnectSocket, recvbuf, sizeof(recvbuf), 0);
- //Top Wyświetla nagłówek wiadnomości o podanym numerze
- sprintf(tablica,"TOP %d\r\n",a); // scalenie polecenia z numerem wiadomości
- iResult=send(ConnectSocket, tablica,(int)strlen(tablica),0);
- iResult=recv(ConnectSocket, recvbuf, sizeof(recvbuf),0);
- // Funkcje, które pokazują określone linie
- wyswietlanie_linii(recvbuf, 1);
- wyswietlanie_linii(recvbuf, 2);
- wyswietlanie_linii(recvbuf, 3);
- wyswietlanie_linii(recvbuf, 4);
- a++;
- }
- closesocket(ConnectSocket);
- WSACleanup;
- system("pause");
- }
- void wyswietlanie_linii(char *wskaz, int i)
- {
- char *poczatkowy; // Wskaźnik na pierwszy znak danej linii
- char nowy[70]; // Do tej tablicy będą przypisywane dane linie wiadomości
- char *nowy_ciag; // wskaźnik na tablicę nowy
- int koniec; // koniec linii
- // Kolejno linie, które zostaną umieszczone na ekranie
- if(i==1)
- poczatkowy=strstr(wskaz,"From");
- else if (i==2)
- poczatkowy=strstr(wskaz,"To");
- else if (i==3)
- poczatkowy=strstr(wskaz,"Subject");
- else if (i==4)
- poczatkowy=strstr(wskaz,"CC");
- //Wskaźnik nowy_ciag wskazuję na peirwszy element tablicy nowy tylko jeśli
- // wskaźnik poczatkowy nie jest pusty
- if(poczatkowy!=NULL){
- nowy_ciag=nowy;
- int literki; //zmienna ukrucająca zapis
- literki = strlen(wskaz); //zlicza pojemność tablicy, którą wskazuje wskaźnik wskaz
- //Zliczenie ilości znaków do końca linii, a potem przypisanie tej wartości
- // zmiennej koniec
- for(koniec=0;koniec<literki;koniec++){
- if(poczatkowy[koniec]== '\n')
- break;
- }
- //wpisanie wierwsza do tablicy nowy
- strncpy(nowy_ciag,poczatkowy,koniec);
- //wypisanie na ekran linii wiadomości
- for(int j=0;j<koniec;j++){
- printf("%c",nowy_ciag[j]);
- }
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement