前へ << モジュールをインストールしよう | UDP を使ってみよう (1) >> 次へ |
% perl -e 'use Net::POP3;'で何も表示されなければ OK です。ホームディレクトリ以下に インストールしている場合は、
% perl -e 'use lib '/home/username/p5-module/'; use Net::POP3;'とします。もし
Can't locate Net/POP3.pm in @INC (@INC contains: /usr/local/lib/perl5/5.00503/i386-freebsd /usr/local/lib/perl5/5.00503 /usr/local/lib/perl5/site_perl/5.005/i386-freebsd /usr/local/lib/perl5/site_perl/5.005 .) at -e line 1. BEGIN failed--compilation aborted at -e line 1.となってしまったら、perl が Net/POP3.pm を捜し出せない ということです。目的のディレクトリに本当にインストールできたか どうかをチェックして下さい。
1: #!/usr/local/bin/perl 2: 3: # $Id: pop3-client-Net::POP3.pl,v 1.2 2007/07/20 10:59:14 68user Exp $ 4: 5: use Net::POP3; # Net::POP3 モジュールを使う 6: 7: use Getopt::Std; # オプション解析用 8: 9: getopts('au:h:p:',\%opts); 10: 11: $hostname = $opts{'h'} || 'pop3.foo.bar.com'; 12: $username = $opts{'u'} || 'username'; 13: $password = $opts{'p'} || 'password'; 14: $use_apop = $opts{'a'} || 0; 15: 16: $pop = Net::POP3->new($hostname); # 接続 17: 18: if ( ! $pop ){ 19: die "接続失敗: $!"; 20: } 21: 22: if ( $use_apop ){ 23: # APOP コマンド送信 24: $auth_check = $pop->apop($username,$password); 25: } else { 26: # USER・PASS コマンド送信 27: $pop->user($username); 28: $auth_check = $pop->pass($password); 29: } 30: 31: if ( ! defined $auth_check ){ 32: die "認証失敗: "; 33: } 34: 35: 36: $ref_mailsize = $pop->list(); # メール一覧のハッシュのリファレンスを得る 37: # メールサイズ表示 38: foreach ( sort {$a<=>$b} keys %{$ref_mailsize} ){ 39: print "Mail NO.$_ $$ref_mailsize{$_}bytes\n"; 40: } 41: 42: *mailindex = $ref_mailsize; # $ref_mailsize の 別名を作る 43: 44: foreach ( sort {$a<=>$b } keys %mailindex ){ 45: print "\nMail No.$_ $mailindex{$_}bytes\n"; 46: 47: $ref_lines = $pop->get($_); # メール本文を取得 48: 49: $line = 1; 50: foreach ( @$ref_lines ){ # 1行ずつ表示 51: s/^\.\././; # 行頭の .. を . に変換 52: print "$line: $_"; 53: $line++; 54: } 55: } 56: 57: $pop->quit(); # ログアウトまず、Net::POP3 モジュールを使うことを宣言します。
5: use Net::POP3; # Net::POP3 モジュールを使うもし個人のホームディレクトリの下 (例えば ~/p5-module/) に モジュールをインストールした場合は、この前に
use lib '/home/username/p5-module'と書かなくてはいけません。
まずはオプション解析です。
7: use Getopt::Std; # オプション解析用 8: 9: getopts('au:h:p:',\%opts); 10: 11: $hostname = $opts{'h'} || 'pop3.foo.bar.com'; 12: $username = $opts{'u'} || 'username'; 13: $password = $opts{'p'} || 'password'; 14: $use_apop = $opts{'a'} || 0;Getopt::Std モジュールを使って、getopts 関数で 引数を解析しています。
9: getopts('au:h:p:',\%opts);は、a、u、h、p オプションを受け取り、そのうち u、h、p オプション (: が書いてあるもの) は後ろに値を持っています。 そのため、
-h pop3.hostname.com -u myusername -p secret -aというオプションを与えたら、
接続とユーザ認証です。
16: $pop = Net::POP3->new($hostname); # 接続 17: 18: if ( ! $pop ){ 19: die "接続失敗: $!"; 20: } 21: 22: if ( $use_apop ){ 23: # APOP コマンド送信 24: $auth_check = $pop->apop($username,$password); 25: } else { 26: # USER・PASS コマンド送信 27: $pop->user($username); 28: $auth_check = $pop->pass($password); 29: } 30: 31: if ( ! defined $auth_check ){ 32: die "認証失敗: "; 33: }面倒なことは全て Net::POP3 モジュールがやってくれます。 Net::POP3->new() で新しいオブジェクトを作り、 $pop に代入。 その後は $pop->関数名 として各種関数を使います。
$use_apop が 1 なら、$pop->apop() を使い、 そうでなければ $pop->user()、$pop->pass() を使います。戻り値が undef なら認証に失敗したということです。
36: $ref_mailsize = $pop->list(); # メール一覧のハッシュのリファレンスを得る 37: # メールサイズ表示 38: foreach ( sort {$a<=>$b} keys %{$ref_mailsize} ){ 39: print "Mail NO.$_ $$ref_mailsize{$_}bytes\n"; 40: } 41:$pop->list() でメールがいくつあるか、 各メールのサイズがわかります。list() が返すのは 「ハッシュへのリファレンス」です。 $ref_mailsize にはハッシュへのリファレンスが代入されますので、 それをデリファレンスした %{$ref_mailsize} が ハッシュになります。 key にはメール番号 (1からの連番)、value にはメール番号のサイズが入っています。 つまり、$$ref_mailsize{'1'} には メール番号 1 のサイズが入っています。
前へ << モジュールをインストールしよう | UDP を使ってみよう (1) >> 次へ |
ご意見・ご指摘は Twitter: @68user までお願いします。