
October 21, 2007 17:21 by
[How To] [c言語]ネットワークプログラミング: メール受信POP3クライアント
POP3クライアントの構成
POP3サーバからメールを取り出すプログラムを構成します。
POP3サーバとTCPコネクションを確立し、POP3サーバからの肯定的な返答「+OK」を確認します。
続いて、USERコマンド、PASSコマンドを使って、POP3サーバに認証情報を送ります。
RETRコマンドを使って、メールを取り出します。
POP3クライアントプログラム(C言語/簡易)
#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 );
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5