| 前へ << モジュールをインストールしよう | 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 までお願いします。