so.. das hat zwar ein bisschen gedauert, aber hier habe ich eine console-anwendung, die emails von einem pop3-server herunterläd, sie anzeigt, und anschliessend vom server löscht.

das ganze ist noch nicht ganz perfekt (man sollte zum bleistift bei jedem "send(..);" den rückgabewert prüfen), aber man sieht wie man es macht, und es funktioniert auch (getestet unter xp mit web.de, gmx.de, und meinem webspace-server).

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

man würde natürlich die mails lokal speichern, und dann einen emailbetrachter öffnen, statt sie nur in der konsole darzustellen.

eine andere idee ist, daraus einen spamfilter zu basteln, der unerwünschte mails löscht, bevor man sein email-proggie öffnet, das dann den rest runterläd.

Katze: strcmp("QUOTE", "CODE") != 0 ) !!!
na gut na gut.. ich habe gerade festgestellt, dass es mit IE und mozilla kein problem ist, den code zu markieren und zu copypasten. nur mein opera kann das nicht. taugenichtse.

gruesse von der katz