Perlによるメール受信・パース(Net::POP3+Email::MIME)
先ほどのエントリーとは逆にPerlを使ってメールの受信をしてみます。メールサーバからメールを取得するのにはNet::POP3を、その内容をパースするのにはEmail::MIMEを利用します。
前回と同じく学習テストを兼ねてサンプルを作成してみました。今回も単純な例としてHTMLメールや添付ファイルとかは考慮せず、サーバに残っているメールからタイトルと本文を表示させてみます。
use strict; use warnings; use utf8; use Encode qw(encode); use Net::POP3; use Email::MIME; my $server = 'mail.example.com'; my $account = 'hoge'; my $password = 'bar'; my $protocol = 'pop3'; my $pop3 = Net::POP3->new($server) or die 'can not open account.'; my $count = $pop3->login($account, $password); my $messages = $pop3->list; my $layout = << 'TMPL'; [TITLE] %s [BODY] %s TMPL for my $id ( sort { $a <=> $b } keys %{ $messages } ) { my $mail = join q(), @{ $pop3->get($id) }; my $parsed = Email::MIME->new($mail); print sprintf $layout, encode( 'utf8', $parsed->header('Subject') ), encode( 'utf8', $parsed->body ) ; } $pop3->quit; 1;
サンプルではメールの取得はPOP3を想定してますが、Net::POP3でAPOPでのメール取得もできるみたいです。
またEmail::MIMEを通すと単純なメールならUTF-8(utf8フラグ付)にデコードした状態で内容を取得できるようになるので便利。