## 世界で一番簡単なメーリングリストサーバを作る為のperlのお勉強 ## 未完成 ## "perl sample2.pl" で起動 use Net::POP3; #POPサーバに接続 my $pop = Net::POP3->new('mailbox.jp', Timeout=> 120) || die "Cound\'t Connect to POP server\n"; $pop->login('abc@def.net', 'abcdef') || die "Authentication failed\n"; #メールのリストを取得(メッセージ番号 => サイズ からなるハッシュリファレンス) my $list_href = $pop->list; #メールを一通づつ取得 foreach my $msg_id (keys %$list_href) { my $message = $pop->get($msg_id); #メールを取得 $format = '[\w\.\-]+\@[\w\-]+\.[\w\.\-]+';#メールアドレスの正規表現(簡略) foreach $line(@$message) { $line1 = $line; # Subjectの取り出し if($line1 =~ /^Subject:/) { $subject = substr($line1, 9); print $subject; } # Fromアドレスの取り出し $line1 = $line; if($line1 =~ /^From:/) { if($line1 =~ /($format)/) { $from_address = $1; print $from_address; } } } # メール本体の取り出し(改行以下から開始) $flag = 0; foreach $line(@$message) { if ($line =~ /^$/) # 空白改行を発見したら { $flag = 1; } if ($flag == 1) # メッセージボディを纏める { $message_body = $message_body . $line; } } # print $message_body; # windows用Sendmailを使って、送られてきたメールをそのまま返す処理 ## http://www.spencernetwork.com/CommonGatewayInterface/WindowsProgram/sendmail.exe.html $from_address =~ s/@/\@/g; # "@" -> "\@"に変換 $to_address = "To: " . $from_address; $to_address = $to_address . "\n"; $from_address = "From: abc\@def.net\n"; $subject = "Subject: " . $subject; # print $to_address; # print $from_address; # print $subject; open(MAIL, "|C:/bin/sendmail -t"); print MAIL $to_address; print MAIL $from_address; print MAIL $subject; print MAIL $message_body; print MAIL "\n\n"; close(MAIL); $pop->delete($msg_id); #メールを削除 } $pop->quit;