MacにPlaggerをインストールする(実際に動かしてみる編)
ここから色々と苦戦した。
まずやりたかったことは、Mixiの日記をGmailで読めるようにすることなのだが、実はこれがまだ出来ていない。
(fetch 0 entriesと表示されてしまう)
ということで、このブログのRSSを読んで、それをGmailで送信、を行ってみる。
まずハマったのがYAMLの記述方法。
とにかくインデントに厳しい。
検索して出てきたYAMLをコピーしてきて、
plagger -c config.yaml
を実行するも、元のソースが一切インデントされておらず、
Plagger::Template [debug] Assets path: /usr/bin/assets/plugins/Publish-Gmail:/usr/bin/assets/common
Plagger::Plugin [fatal] file error - gmail_notify.tt: not found at line 144
こんなエラーが出てくる。
原因はこれ
global: assets_path: /Users/username/plagger/assets/ timezone: Asia/Tokyo
2行目、3行目がインデントされていないので読み込んでくれなかったようだ。
global: assets_path: /Users/username/plagger/assets/ timezone: Asia/Tokyo
こうすれば大丈夫。YAMLは触ったことが無いので非常に厄介だ。
よーし、ついに動くぞ、と思うもまたしても問題発生。
今度はこんなエラー。
Plagger::Plugin::Publish::Gmail [error] Error while sending emails: Failed to connect to mail server: Connection refused
at /Users/to510/Downloads/plagger-0.7.17-1/cpan/lib/perl5/site_perl/Plagger/Plugin/Publish/Gmail.pm line 118
またしても原因はYAML。
- module: Publish::Gmail config: メール送信先 mailfrom: 送信者(なんでもおk) mailroute: via: smtp_tls host: smtp.gmail.com:587 username: Gmailアカウント password: Gmailパスワード
5行目以降にインデントが無い。
↓これでおk
- module: Publish::Gmail config: メール送信先 mailfrom: 送信者(なんでもおk) mailroute: via: smtp_tls host: smtp.gmail.com:587 username: Gmailアカウント password: Gmailパスワード
2回失敗して、YAMLのインデントの感覚は覚えてきた。
なんというか、キレイなツリー構造をインデントで表現してやらねばならないようだ。
とにかく内側の処理になったらインデント。
そろそろ動く…よね?
Plagger::Plugin::Publish::Gmail [error] Error while sending emails: Undefined subroutine &MIME::Lite::extract_addrs called at /Library/Perl/5.8.8/Plagger/Plugin/Publish/Gmail.pm line 217.
またキタコレ。
とにかくGmail.pmの217行目を見てみる。
my($from) = MIME::Lite::extract_addrs( $self->get('From') );
悪いのはここらしいですよ。
で、/Library/Perl/5.8.8/MIME/Lite.pm を調べる。
extract_addrsなんて無いorz
539行目にこんなものがある。
sub extract_full_addrs { my @ret=map { $_->format } Mail::Address->parse($_[0]); return wantarray ? @ret : $ret[0] } sub extract_only_addrs { my @ret=map { $_->address } Mail::Address->parse($_[0]); return wantarray ? @ret : $ret[0] }
ということで、/Library/Perl/5.8.8/MIME/Lite.pmを修正。
212行目からを二カ所変更
# hack MIME::Lite to support TLS Authentication *MIME::Lite::send_by_smtp_tls = sub { my($self, @args) = @_; ### We need the "From:" and "To:" headers to pass to the SMTP mailer: my $hdr = $self->fields(); my($from) = MIME::Lite::extract_full_addrs( $self->get('From') );#ここ変更した my $to = $self->get('To'); ### Sanity check: defined($to) or Carp::croak "send_by_smtp_tls: missing 'To:' address\n"; ### Get the destinations as a simple array of addresses: my @to_all = MIME::Lite::extract_full_addrs($to);#ここ変更した if ($MIME::Lite::AUTO_CC) { foreach my $field (qw(Cc Bcc)) { my $value = $self->get($field); push @to_all, MIME::Lite::extract_addrs($value) if defined($value); } }
こんな風に。
で、最終的なYAMLはこれ。
global: assets_path: /Users/username/plagger/assets/ timezone: Asia/Tokyo plugins: - module: Subscription::Config config: feed: - http://d.hatena.ne.jp/goryugo/rss - module: CustomFeed::Mixi config: email: Mixi email password: password fetch_body: 1 fetch_comment: 1 show_icon: 1 feed_type: - FriendDiary - RecentComment - Message - Log - module: Publish::Gmail config: mailto: mail mailfrom: from mailroute: via: smtp_tls host: smtp.gmail.com:587 username: gmail ID password: password
やっとメール届いたよ…
ミクシィにログインしなくてすむように、今度はマイミクの日記をメールしたいです…