◆メール通知をtweetで教えてくれるモノ
昨日はメールからSubject: From: ヘッダをファイルに抽出する方法を試してみました。今日は引き続き、メールが届いたら、こんな風に twitter に自動投稿(tweet)するスクリプトを試作しました。
◆下準備
今回も Perl のスクリプトです。昨日の投稿のように、.forward で parseMail.pl を実行するようにしておきます。
それと、twitter への投稿は、Net::Twitterモジュールを使用します。これは twitter の API を使って投稿しますので、API の登録を済ませておく必要があります。
アプリケーション登録申請 ( https://dev.twitter.com/apps/new ) ページにアクセスし、各種情報を入力します。(※ API登録時、アクセスタイプは「Read & Write」にしないと tweet 出来ないので要注意。)
登録が完了すると “http://dev.twitter.com/apps/数字” のページに遷移します。ここで表示される「Consumer Key」と「Consumer secret」を控えておきます。
次に、同ページ右上のボタン「My Access Token」をクリックします。画面が変わったら「Access Token(oauth_token)」「 Access Token Secret(oauth_token_secret)」を控えておきます。
◆改良版 parseMail.pl
昨日のサンプルは Subject: From: ヘッダをファイルに記録するだけでした。今回は Subject: From: の情報を、こちらのように tweet で通知するように書き換えます。
#!/usr/bin/perl
use warnings;
use Encode qw(decode);
use utf8;
use Net::Twitter;
binmode(STDOUT, ":utf8");
our $From;
our $Subject;
foreach my $mail () {
chomp $mail;
$From = $3 if ($mail =~ /^(From:)(\s)(.*)$/);
$Subject = $3 if ($mail =~ /^(Subject:)(\s)(.*)$/);
last if !$mail;
# push @mail,$mail."\n";
}
$Subject = decode ('MIME-header', $Subject);
$From = decode ('MIME-header', $From);
open(DAT,">>/home/testmail/mail.dat");
print DAT "From\t$From\n";
print DAT "Subj\t$Subject\n";
close(DAT);
exit if (!($Subject && $From));
my $nt = Net::Twitter->new(
traits => [qw/API::REST OAuth WrapError/],
consumer_key => '<Consumer Key>',
consumer_secret => '<Consumer secret>',
ssl => 1,
);
$nt->access_token ('<Access Token>');
$nt->access_token_secret('<Access Token Secret>');
# http://search.cpan.org/~mmims/Net-Twitter-3.14003/lib/Net/Twitter.pod
$From =~ s/(\s)(<)(.*)(>)//;
my $tweet = '.@twitterアカウント名 メールが届きました( ´∀`) Subect: '.$Subject.' (From: '.$From.")";
$nt->update($tweet);
exit;
あとは、当該アカウントにメールを送ると、投稿が完了します。$tweet の部分は、適時書き換えてご利用ください。
汎用的なメール到着用のスクリプトとして使えると思います( ´∀`)
…これで、やりたい事の半分ぐらいはクリアしたかな?