POP3サーバからメールを取り出すプログラムを構成します。
POP3サーバとTCPコネクションを確立し、POP3サーバからの肯定的な返答「+OK」を確認します。
続いて、USERコマンド、PASSコマンドを使って、POP3サーバに認証情報を送ります。
RETRコマンドを使って、メールを取り出します。

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>

#define BUFLEN 256
#define PORT 110

#define BY_HOSTNAME
/*#define BY_ADDRESS */

main( int argc, char **argv ) {
  struct hostent *host;
  struct sockaddr_in server;

  int s;
  int n,n2;
  char buf[BUFLEN];
  FILE *fp;

  printf( " HOST: argv[ 1 ] = %s \r\n", argv[ 1 ] );
  printf( " USER: argv[ 2 ] = %s \r\n", argv[ 2 ] );
  printf( " PASS: argv[ 3 ] = %s \r\n", argv[ 3 ] );

  bzero((char *)&server,sizeof(server));
  server.sin_family = AF_INET;
  server.sin_port = htons(PORT);

#if defined(BY_HOSTNAME)
  host = gethostbyname( argv[ 1 ] );
  bcopy(host->h_addr,(char *)&server.sin_addr,host->h_length);
#elif defined(BY_ADDRESS)
  server.sin_addr.s_addr = inet_addr(IP_ADDRESS);
#endif

  s = socket(AF_INET,SOCK_STREAM,0);
  connect(s,( struct sockaddr *) &server,sizeof(server));

  fp = fdopen( s, "r+" );
  if ( fp == NULL ){
   fprintf(stderr, "fdopen error \r\n");
   return 0;
  }

  fgets( buf, sizeof( buf ), fp );
  printf( "%s", buf );

  fprintf( fp, "USER %s\r\n", argv[ 2 ] );
  fgets( buf, sizeof( buf ), fp );
  printf( "%s", buf );

  fprintf( fp, "PASS %s\r\n", argv[ 3 ] );
  fgets( buf, sizeof( buf ), fp );
  printf( "%s", buf );

  fprintf( fp, "LIST\r\n" );
  while( 1 ){
 if ( fgets( buf, sizeof( buf ), fp ) == NULL ) break;
   if ( buf[ 0 ] == '.' ) break;
 sscanf( buf, "%d %d\r\n", &n, &n2 );
  }

  printf("LIST: %d %d\r\n", n, n2 );
 
  fprintf( fp, "RETR %d\r\n", n );
  while( 1 ){
 if ( fgets( buf, sizeof( buf ), fp ) == NULL ) break;
 if ( buf[ 0 ] == '.' ) break;
 printf("%s", buf );
  }

  fprintf( fp, "QUIT\r\n" );
  fgets( buf, sizeof( buf ),fp );
  printf( "%s", buf );

  close(s);
}