#!/usr/local/bin/perl -w # $Id: pop3-client.pl,v 1.2 2002/02/05 17:53:10 68user Exp $ # POP3サーバ名、ユーザ名、パスワード $connect_host = 'pop3.foo.bar.com'; $username = 'USERNAME'; $passwd = 'PASSWORD'; use Socket; # Socket モジュールを使う # プロトコルは POP3 を使う $port = getservbyname('pop3', 'tcp') || 110; # ホスト名を、IPアドレスの構造体に変換 $iaddr = inet_aton($connect_host) || die "$connect_hostは存在しないホストです。\n"; # port と IP アドレスをまとめて構造体に変換 $sock_addr = pack_sockaddr_in($port, $iaddr); # ソケット生成 socket(SOCKET, PF_INET, SOCK_STREAM, 0) || die "ソケットを生成できません。\n"; connect(SOCKET, $sock_addr) || die "$connect_host のポート $port に接続できません。\n"; # ファイルハンドルSOCKETをバッファリングしない select(SOCKET); $|=1; select(STDOUT); # POP3サーバにユーザ名とパスワードを送る print SOCKET "USER $username\r\n"; print SOCKET "PASS $passwd\r\n"; # メールの一覧を取得 print SOCKET "LIST\r\n"; while (){ # 「.」のみの行が送られてきたらループを抜ける m/^\.\r\n$/ && last; # 「メール番号 バイト数」という行なら if ( m/^(\d+) (\d+)\r\n$/ ){ $num=$1; $size=$2; # メール番号を @mails に push push(@mails, $num); } } # 各メールについて foreach ( @mails ){ # メールの内容を送信するようリクエストを送る print SOCKET "RETR $_\r\n"; while (){ # 「.」のみの行が送られてきたらメールの終り。 m/^\.\r\n$/ && last; print $_; } } # サーバとの接続を切る print SOCKET "QUIT\r\n";