SmallStyle


2008-08-03

_ Publish::IMAP を SSL 対応にする

Plagger でメール送信といえば Publish::Gmail ですが,Gmail で見るだけなら,Publish::IMAP 使う方法もあるなぁ,ということで試してみたら動かない.Gmail の IMAP 接続には SSL が必要なので,Publish::IMAP で SSL 通信のオプション渡せるように手を加えてみました.

use_ssl オプションで 1 を指定し,ホスト名とポート番号を指定します.デフォルトは localhost:993 です.以下 diff です.

--- IMAP.pm     2008-07-24 13:27:36.000000000 +0900
+++ IMAP.pm.new 2008-07-24 16:36:25.000000000 +0900
@@ -8,6 +8,7 @@
 use Encode::MIME::Header;
 use MIME::Lite;
 use IO::File;
+use IO::Socket::SSL;
 use Mail::IMAPClient;
 use Digest::MD5 qw/ md5_hex /;
 
@@ -27,7 +28,18 @@
 sub initialize {
     my($self, $context, $args) = @_;
     my $cfg = $self->conf;
+
+    my $socket = undef;
+    if ($cfg->{use_ssl}) {
+            $socket = IO::Socket::SSL->new(
+            Proto    => 'tcp',
+            PeerAddr => $cfg->{host} || 'localhost',
+            PeerPort => $cfg->{port} || 993,
+          ) or die $context->log(error => "create scoket error; $@");
+    }
+
     $self->{imap} = Mail::IMAPClient->new(
+        Socket   => $socket,
         User     => $cfg->{username},
         Password => $cfg->{password},
         Server   => $cfg->{host} || 'localhost',

Gmail への IMAP 接続時の設定を例にすると以下のようになります.

  - module: Publish::IMAP
    config:
      use_ssl: 1
      host: imap.gmail.com   
      port: 993
      username: example@gmail.com
      password: password
      folder: plagger

余談ですが,stone を使って中継すると,Publish::IMAP には手を加えずに接続できたりします.例えば,以下のように stone を実行して,Publish::IMAP ではローカルのポートに接続するといった形になります.

$ stone imap.gmail.com:993/ssl 10143

これはこれで使えますね.


about me

いろいろと興味を持ったことを書いてます.ちょっとしたことは hb(@smallstyle) on Twitter で書いてます.

Archive

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|12|