[Edit][Create New]
[ IndexPage / ネットとプログラミング / CGI / クライアントプログラムサンプル / pop.pl ]

pop.pl

#!/usr/bin/perl

use Socket; 

# URLを解釈する
$hostname = $ARGV[0] or die; 
$port = 110; # ポート番号
$ipaddr = inet_aton($hostname);

# ソケット作成
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or die;

# connectする(bindは省略してある)
connect(SOCK, sockaddr_in($port, $ipaddr)) or die;

# バッファリング無効
select(SOCK); $| = 1; select(STDOUT);

#######################################

# POPサーバーから送られてくる挨拶を受け取る
$reply = <SOCK>;
die $reply if $reply =~ /^-ERR/;

# ユーザー名を聞く
print "Username?\n";
chop($username = <STDIN>);

# ユーザー名をサーバーに確認を取る
print SOCK "USER $username\r\n";
$reply = <SOCK>;
die $reply if $reply =~ /^-ERR/;

# パスワードを聞く
print "Password?\n";
system("stty -echo"); # 画面にパスワードがでないよう工夫
chop($pass = <STDIN>);
system("stty echo");  # もとにもどす

# パスワードをサーバーに確認を取る
print SOCK "PASS $pass\r\n";
$reply = <SOCK>;
die $reply if $reply =~ /^-ERR/;

# 届いているメールを確認する
print SOCK "STAT\r\n";
$reply = <SOCK>;
die $reply if $reply =~ /^-ERR/;

($ok, $count, $byte) = split(/ /, $reply);
$byte = int($byte/1024); # キロバイトに直す
print "$usernameさん宛てに$count通($byteキロバイト)のメールが届いています\n";