ソケットを使ってPOPサーバーに接続しよう
ソケットの際の基本構文
→
表示画面
1: #!/usr/bin/perl
2: print "Content-type:text/html\n\n";
3: use Socket;
4:
5: #---接続情報の設定-----
6: $pop_server="pop.grot3.com"; #POPサーバー名の指定(サーバ名は仮定です)
7:
8: &ConnectPop; #10〜17行目までのサブプロシージャの呼び出し
9: close (SOCKET); #ソケット接続の終了
10:
11: #----------------------------------------------
12: #接続
13: #----------------------------------------------
14: sub ConnectPop{
15: $ipaddr = inet_aton( $pop_server ); #POP3サーバーをIPアドレス(4バイト)に変換
16: $sockaddr = sockaddr_in(110,$ipaddr); #IPアドレスとポート番号をひとまとめにした構造体の作成
17: socket(SOCKET, PF_INET, SOCK_STREAM, 0) || die "ソケット失敗";
18: connect(SOCKET, $sockaddr ) || die "コネクト失敗";
19: select(SOCKET); $| = 1; select( STDOUT ); #SOCKET でバッファリングしない
20: $resp=<SOCKET>;
21: }
メモ:
上記は、ソケット接続の際の決まりのようなもの。
平たく言えば、「telnet
110」をperlで行っている。
ソケットにコマンドを送りログインする
→
表示画面
1: #!/usr/bin/perl
2: print "Content-type:text/html\n\n";
3: use Socket;
4:
5: #---接続情報の設定-----
6: $pop_server="pop.grot3.com"; #POPサーバー名の指定(サーバ名は仮定です)
7: $account="grot3"; #POPサーバー用アカウント(仮定です)
8: $password="1234567"; #POPサーバー用パスワード(仮定です)
9:
10: &ConnectPop; #10〜17行目までのサブプロシージャの呼び出し
11: close (SOCKET); #ソケット接続の終了
12:
13: #----------------------------------------------
14: #接続
15: #----------------------------------------------
16: sub ConnectPop{
17: $ipaddr = inet_aton( $pop_server ); #POP3サーバーをIPアドレス(4バイト)に変換
18: $sockaddr = sockaddr_in(110,$ipaddr); #IPアドレスとポート番号をひとまとめにした構造体の作成
19: socket(SOCKET, PF_INET, SOCK_STREAM, 0) || die "ソケット失敗";
20: connect(SOCKET, $sockaddr ) || die "コネクト失敗";
21: select(SOCKET); $| = 1; select( STDOUT ); #SOCKET でバッファリングしない
22: $resp=<SOCKET>;
23:
24: #-----接続
25: print SOCKET "USER $account\r\n";$resp=<SOCKET>; #SOCKET へユーザー名の送信
26: print SOCKET "PASS $password\r\n";$resp=<SOCKET>; #SOCKET へパスワードの送信
27: if($resp !~ m/OK/){print "<B>エラー:<ユーザー名 か パスワードが違います></B><BR>";exit;} #ログインが失敗した場合の表示
28: print SOCKET "STAT\r\n";$resp=<SOCKET>; #受信メール件数の確認のためのコマンド
29: @num=split(/ /,$resp);
30: $mcount=@num[1];
31: if($mcount eq 0){
32: print "メールはありません\n";
33: exit 0;
34: }
35: print "受信メール数: $mcount 件<BR><BR>";
36: }
メモ:
「print SOCKET "コマンド"」 で、ソケットにコマンドを送信している。
「$resp = 」で、その際のレスポンスを変数respに代入している。
本当は25〜26行目まででOK。27〜35行目はお好みで。