Code:
#include<stdio.h>
#include <winsock2.h>
//#include<string.h> // braucht bcc32 nicht
int main(int argc, char* argv[])
{
long rc;
SOCKET s;
SOCKADDR_IN addr;
char buf[1024];
WSADATA wsa;
HOSTENT* he;
int number_of_mails,i;
char *p,*p2;
if(argc!=4)
{
printf("syntax: pop3console.exe host user password\n");
printf("syntax: pop3console.exe pop3.web.de meier@web.de ganzgeheim\n");
exit(1);
}
// socket erstellen und connecten
if(WSAStartup(MAKEWORD(2,0),&wsa)!=0)
{
printf("Could not Startup WSA\n");
exit(1);
}
s=socket(AF_INET,SOCK_STREAM,0);
if(s==INVALID_SOCKET)
{
WSACleanup();
printf("Could not create socket\n");
exit(1);
}
memset(&addr,0,sizeof(SOCKADDR_IN)); // auf 0 setzen
addr.sin_family=AF_INET;
addr.sin_port=htons(110); // port
he=gethostbyname(argv[1]);
memcpy(&(addr.sin_addr),he->h_addr_list[0],4);
rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
if(rc==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
printf("Could not connect\n");
exit(1);
}
printf("connected to %s\n",argv[1]);
// login + check for mail
sprintf(buf,"USER %s\r\n",argv[2]);
rc=send(s,buf,strlen(buf),0);
if(rc==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
printf("Could not send\n");
exit(1);
}
rc=recv(s,buf,1023,0);
buf[rc]='\0';
printf("%s",buf);
sprintf(buf,"PASS %s\r\n",argv[3]);
rc=send(s,buf,strlen(buf),0);
if(rc==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
printf("Could not send\n");
exit(1);
}
rc=recv(s,buf,1023,0);
buf[rc]='\0';
printf("%s",buf);
rc=recv(s,buf,1023,0);
buf[rc]='\0';
printf("%s",buf);
sprintf(buf,"STAT\r\n");
rc=send(s,buf,strlen(buf),0);
if(rc==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
printf("Could not send\n");
exit(1);
}
rc=recv(s,buf,1023,0);
buf[rc]='\0';
printf("%s",buf);
// anzahl der mails bestimmen
// wenn alles geklappt hat, steht hinter dem letzten "+OK" die anzahl der mails im postfach
p=buf;
while(strstr(p,"+OK")!=NULL)
p=strstr(p,"+OK")+1;
p+=3;
p2=strstr(p," ");
if(p&&p2)
{
*p2=0;
number_of_mails=atoi(p);
printf("%d mails auf dem server\n",number_of_mails);
}
// mails runterladen
for(i=1;i<=number_of_mails;i++)
{
sprintf(buf,"RETR %d\r\n",i);
send(s,buf,strlen(buf),0);
do
{
rc=recv(s,buf,1024,0);
buf[rc]='\0';
printf("%s",buf);
if(strstr(&buf[rc-5],"\r\n.\r\n")!=NULL)break;
}
while(rc!=SOCKET_ERROR);
// geladene email vom server löschen
sprintf(buf,"DELE %d\r\n",i);
send(s,buf,strlen(buf),0);
}
// session beenden
sprintf(buf,"QUIT\r\n");
send(s,buf,strlen(buf),0);
// aufraeumen
closesocket(s);
WSACleanup();
return 0;
}
vielleicht hilft es jmd
Lesezeichen