TOP

ソケットを使って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行目はお好みで。


<前へ  2  次へ>