POP3 サーバからメッセージを取ってきて、自分のところの sendmail を使ってメッセージを再配送する perl スクリプトの 例。 #!/usr/local/bin/perl # tcpclient サーバ pop3 popclient.pl [-d] アカウント $debug=0; $user="アカウント"; while($op=$ARGV[0]) { if($op eq "-d") { $debug=1; shift; } else { $user=$op; last; } } if($user eq "foo") { $pass="パスワード"; $rcpt="再配送先メイルアドレス"; } elsif($user eq "bar") { $pass="パスワード"; $rcpt="再配送先メイルアドレス"; } else { die "unknown user: $user\n" } sub open_pop3 { open(RECV,"<&6") || die "open <&6 failed\n"; open(SEND,">&7") || die "open >&7 failed\n"; select SEND; $|=1; select STDOUT; &expect_ok(); } sub close_pop3 { close(RECV); close(SEND); } sub expect_ok { $res=; print $res if $debug; if($res=~/^\+OK/) { return; } die "unexpected response: $res\n"; } @messagelist=(); &open_pop3(); print SEND "user $user\r\n"; &expect_ok(); print SEND "pass $pass\r\n"; &expect_ok(); print SEND "list\r\n"; &expect_ok(); while(1) { $res=; print $res if $debug; $res=~s/[\r\n]*$//; if($res eq ".") { last; } ($mno,$msize)=split(/[\s\t]+/,$res); push(@messagelist,($mno,$msize)); } for($i=0;$i<$#messagelist;$i+=2) { $mno=$messagelist[$i]; $msize=$messagelist[$i+1]; # メッセージサイズによって受取り拒否をすることも、やれば可能 print SEND "retr $mno\r\n"; &expect_ok(); open(sendmail,"|/usr/sbin/sendmail $rcpt") || die "cannot open sendmail\n"; while(1) { $res=; $res=~s/[\r\n]*$//; if($res eq ".") { last; } print sendmail "$res\n"; } close(sendmail); print SEND "dele $mno\r\n"; &expect_ok(); } print SEND "quit\r\n"; &expect_ok(); &close_pop3();