«前の日記(2007-09-20(Thu)) 最新 次の日記(2007-09-22(Sat))» 編集

ぽっぺん日記@karashi.org


2007-09-21(Fri) [長年日記]

_ MIME::Liteのバージョンを上げたらP::P::P::Gmailが動かなくなったのでpatchを書いた

久しぶりにplaggerを動かしているホストでportupgradeしたところ、Plagger::Plugin::Publish::Gmailが

Plagger::Plugin::Publish::Gmail [error] Error while sending emails: Undefined subroutine &MIME::Lite::extract_addrs called at C:/Perl/site/lib/Plagger/Plugin/Publish/Gmail.pm line 217.

というエラーを吐くようになってしまった。

で、調べてみたところ、どうやらMIME::Lite::extract_addrsがMIME::Lite::extract_full_addrsにrenameされたのが原因ぽいので、patchを書いてみた。

--- Gmail.pm.orig	Fri Sep 21 22:31:16 2007
+++ Gmail.pm	Sat Sep 22 00:22:34 2007
@@ -211,21 +211,25 @@
 # hack MIME::Lite to support TLS Authentication
 *MIME::Lite::send_by_smtp_tls = sub {
     my($self, @args) = @_;
+    my $extract_addrs_ref =
+        defined &MIME::Lite::extract_addrs
+        ? \&MIME::Lite::extract_addrs
+        : \&MIME::Lite::extract_full_addrs;

     ### We need the "From:" and "To:" headers to pass to the SMTP mailer:
     my $hdr   = $self->fields();
-    my($from) = MIME::Lite::extract_addrs( $self->get('From') );
+    my($from) = $extract_addrs_ref->( $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_addrs($to);
+    my @to_all = $extract_addrs_ref->($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);
+            push @to_all, $extract_addrs_ref->($value) if defined($value);
         }
     }

酔った勢いで#plagger-jaで報告してみたら、miyagawaさんから、このパッチだと古いMIME::Liteで動かなくなると指摘を頂いた

確かに。

で、miyagawaさんの提案が以下の通り。

23:58 (miyagawa_) my $sub = defined &MIME::Lite::extract_addrs ? \&MIME::Lite::extract_addrs : \&MIME::Lite::extract_full_addrs;
23:58 (miyagawa_) $sub->()

なるほどー。Perlでは、こう書くんだな。すげー勉強になる。

ちょっと、今は酔っているので、あとで上のパッチを見直そう。書き直した。

書き直してみた

新旧のMIME::Liteに対応できたはず。

追記

HTMLメールのレイアウトが崩れるようになってしまったので、結局、 MIME::Liteのバージョンを3.01へ戻した。

本日のツッコミ(全3件) [ツッコミを入れる]
_ 荒木 (2007-10-21(Sun) 00:50)

はじめまして。plagger初心者です。<br>Windows環境でPlaggerを試してみようと試行錯誤していました。<br>よく分からなくて、モジュールのバージョンアップ等をしているうちに、どうしても解決できないエラーメッセージが出てきてしまいました。<br>しかし、こちらのサイトのおかげで、解決することができました。<br>ありがとうございました。

_ tokuhirom (2007-12-08(Sat) 14:27)

遅くなりましたが、commit させていただきました。<br>http://plagger.org/trac/changeset/1994

_ poppen (2007-12-09(Sun) 11:31)

commit ありがとうございます。 > tokuhirom 様

[]
本日のPingbacks(全0件)

«前の日記(2007-09-20(Thu)) 最新 次の日記(2007-09-22(Sat))» 編集