Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2012, 14:45   #1
WinNet
 
Регистрация: 25.07.2012
Сообщений: 4
По умолчанию Посмотриет код

Доброе время суток
нашол пример клиента для просмотра почты.
на C/C++
мне нужно реализовать такой алгоритм
проверить почту
вывести заголовки сообщений
Тока заголовки которые там есть! или адреса отправителей!
как сделать подскажите!
Projest1
Код:
#include <winsock.h>
#include <stdio.h>

int s,x;

//FILE *f_out;

bool is_error(char* text)   { return strncmp("+",text,3); }

int send_to(char* chr )
{
	//printf(chr);
    if ( send(s,chr,strlen(chr),0)==SOCKET_ERROR )
	{
		printf("error send: %d\n",WSAGetLastError());
		return 0;
	}
	return 1;
}

bool reciv_and_noerr(char* chr )
{
	//  return true;
	int len;
	
	if ( (len=(recv(s,chr,5490,0    )))==SOCKET_ERROR )
	{ printf("error recv %d \n",WSAGetLastError()); return false;}
	
	*(chr+len-1)=0;
	
	printf(chr);
	printf("\n");
	
	
	return is_error(chr);
}


// cl tiny.cpp /MD /Og /Os /link /ALIGN:0x10 /merge:.rdata=.data

//*********************************************************************
//*********************************************************************
int main(int argc, char* argv[])
{
	if (argc < 3)
	{                
		printf("\n============================================================");
		printf("\nPOP3 email box checker  by Shilonosov.A.  (shilonosov@mail.ru ..@mail.md)" ) ;
		printf("\nsee: www.shilonosov.f2s.com, www.shilonosov.da.ru");
		printf("\nQMAIL.EXE [@I.P]POP3_Server[:port] user:pass");
		printf("\noptions :\n");                
		printf("\n");                
		printf(" programm output:  answers of SMTP server\n (errorlevel=1 if succes)\n" );
		printf(" examples:\n");
		printf("pop3.exe pop3.mail.com myname:mypass\n");                
		printf("============================================================\n");
		
		return 0;
	}
	
	WSADATA rec;
	struct sockaddr_in con;
	PHOSTENT pHost;
	char* text= new char[5000];

	int err=0;
	char *s2;
	char server[100];
	char port[10];	
	
	
	strcpy(server,argv[1]);
	strcpy(port,"110");
	
	if ( strchr(server,':') ) // another port
	{
		strncpy(port,strchr(server,':')+1,5) ;
		*strchr(server,':')  = 0;
	}
	
	
	//Open Sokets
	int wVer = MAKEWORD(1, 1);
	if ( WSAStartup(wVer,&rec) )
	{
        printf("error WSAstarup \n");
        return 0;
	}
	
	if ((s = socket(AF_INET, SOCK_STREAM,0)) == INVALID_SOCKET)
	{ printf("Socket Error:     %d \n",WSAGetLastError()); goto exit;}
	//resolve
	if ( server[0]=='@' ) con.sin_addr.s_addr=inet_addr(server+1);
	else
	{
		printf("Look up for POP3 server....\n%s",server);
		if ( !(pHost=gethostbyname(server) ) )
		{ printf("Cant find (error %d)\n",WSAGetLastError()); goto exit; }
		//
		PCHAR p;
		memmove(&p,*pHost->h_addr_list,sizeof(PCHAR));
		memmove(&con.sin_addr.s_addr,&p,sizeof(PCHAR));
	}
	printf("\n");
	printf((char*)inet_ntoa(con.sin_addr));
	printf("\n");
	
	con.sin_family=AF_INET;
	con.sin_port=htons( atoi(port) );
	//conect
	if ( connect(s,(struct sockaddr*)&con,sizeof(con))==INVALID_SOCKET )
	{ printf("error connect %d\n",WSAGetLastError()); goto exit; }
	printf("Connected...\n");	
	
	if ( !reciv_and_noerr(text) ) goto exit;
	
	//Talk to SMTP server begin....
	
	s2=strchr( argv[2],':');
	if ( s2 ) *s2=0; else goto exit;
	
	strcpy(text,"user "); strcat(text,argv[2]);  strcat(text,"\xD\xA\x0");
	if ( !send_to( text) ) goto exit;
	if ( !reciv_and_noerr(text) ) goto exit;
	//if ( !
	strcpy(text,"pass "); strcat(text,s2+1);  strcat(text,"\xD\xA\x0");
	if ( !send_to( text) ) goto exit;
	if ( !reciv_and_noerr(text) ) goto exit;
	
	strcpy(text,"QUIT"); strcat(text,"\xD\xA\x0");
	if ( !send_to( text) ) goto exit;
	if ( !reciv_and_noerr(text) ) goto exit;                                
	
exit:
	delete text;
	closesocket(s);
	WSACleanup();
	return 1;
}
StdAfx.cpp
Код:
#include "stdafx.h"
StdAfx.h
Код:
#if !defined(AFX_STDAFX_H__B8B7F1E3_4885_11D4_AAC5_8DCAFB43D55B__INCLUDED_)
#define AFX_STDAFX_H__B8B7F1E3_4885_11D4_AAC5_8DCAFB43D55B__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers



// TODO: reference additional headers your program requires here

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__B8B7F1E3_4885_11D4_AAC5_8DCAFB43D55B__INCLUDED_)
WinNet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делфи. как правильно вставить код в код? Кушманский Помощь студентам 13 18.03.2012 20:06
перевод в ASCII код и в двоичный код Randy.Mandy Microsoft Office Excel 0 27.02.2012 21:40
Доп.код,обратный код,прямой код вычисления Lukas077 Помощь студентам 0 20.03.2011 12:07
Код написал код, но ответ постоянно один и тот же SkuLLL Помощь студентам 4 14.12.2010 19:25
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? Mclaren Помощь студентам 2 27.04.2009 22:37