MacにPlaggerをインストールする(実際に動かしてみる編)

未分類

MacにPlaggerをインストールする(実際に動かしてみる編)

ここから色々と苦戦した。 まずやりたかったことは、Mixiの日記をGmailで読めるようにすることなのだが、実はこれがま […]

最終更新日:2017年3月14日

ここから色々と苦戦した。

まずやりたかったことは、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

やっとメール届いたよ…

ミクシィにログインしなくてすむように、今度はマイミクの日記をメールしたいです…

セール・特価情報

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

未分類カテゴリーの記事を全部見る