AnyEvent::IMAPListen + WebService::ImKayacを組み合わせた時
こんな感じ。
#!/usr/bin/env perl use common::sense; use utf8; use FindBin; use lib "$FindBin::Bin/AnyEvent-IMAPListen/lib"; use lib "$FindBin::Bin/WebService-ImKayac/lib"; use AnyEvent::IMAPListen; use WebService::ImKayac; use Config::Pit; use Encode; my $im = WebService::ImKayac->new( type => 'secret', %{ pit_get('im.kayac') } ); my %param_base = ( Ssl => 1, Uid => 1, Debug => 1, on_error => sub { my ($self, $e_error, $l_error) = @_; warn "[DEBUG][ON_ERROR] ${e_error}, ${l_error}\n" if $self->debug; } ); my @accounts = ( { %{ pit_get('mail_account1') }, on_notify => sub { # if mail comes my ($self, $header, $mid) = @_; my $from = $header->{From}->[0]; my $subj = $header->{Subject}->[0]; ($from = decode('MIME-Header', $from)) =~ s{ <.+?>$}{}; $subj = decode('MIME-Header', $subj); $im->send(sprintf('[mail][ACCOUNT1] subject:%s from:%s', $subj, $from)); }, }, { %{ pit_get('mail_account2') }, on_connect => sub { shift->imap->select('hoge'); }, on_notify => sub { # if mail comes my ($self, $header, $mid) = @_; my $from = $header->{From}->[0]; my $subj = $header->{Subject}->[0]; ($from = decode('MIME-Header', $from)) =~ s{ <.+?>$}{}; $subj = decode('MIME-Header', $subj); $im->send(sprintf('[mail][ACCOUNT2][hoge] subject:%s from:%s', $subj, $from)); }, } ); my @listeners = map { AnyEvent::IMAPListen->new( %param_base, %$_ )->start } @accounts; AE::cv->recv;