imaptoolsの代わりになるものを探すと、あっさりその名もpop2imap。今回の perlでモジュールをいくつか追加するだけでよさそう、と思ったらSSLサーバの認証が厳しくなってた。
普通に使うと、
From pop3 server [popserver] port [110] user [popuser] To imap server [imapserver] [ssl] port [993] user [imapuseruser] TimeZone :[asia/tokyo] Login POP OK Unable to connect to imapserver: SSL connect attempt failed error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed ...propagated at /usr/local/bin/pop2imap line 242.
と、今回は imap側のみSSLにしているが、エラーになる。
いろいろ検索してみると出てくるが、利用しているモジュール Mail::IMAPClient の中で呼ばれている IO::Socket::SSLでの証明書の取扱が厳格になったため、IMAPサーバで利用している勝手証明書(自己CA署名)の verifyが通らないからのようだ。https://metacpan.org/pod/IO::Socket::SSL#SSL_verify_modeにあるように、serverのときは SSL_VERIFY_NONE,clientとして使うときは SSL_VERIFY_PEERと、なり今回のように imap clientとして動作するときはその正当性を見るらしい。CAルートとして、SSL_ca_file,SSL_ca_path などで設定することもできたり、IO::Socket::SSLをインストールすると入る? Mozzila/CA/cacert.pm を見に行くようになっている。
勝手証明書を指定したり、正規の証明書を取得するのもありだけど、そこそこ面倒なので、単に IO::Socket::SSLを呼ぶときに SSL_VERIFY_NONE にしてしまうのが一番簡単かと。どうするべと思っていたら、
Mail::IMAPClientに、Socketargsという設定があって Mail::IMAPClientから IO::Socket::SSLを呼ぶときにパラメータ設定ができるようになっているのでこれを利用することにする。
*** /usr/local/bin/pop2imap Thu Dec 27 21:49:13 2018 --- /usr/local/bin/pop2imap_noac Wed Jan 9 19:53:45 2019 *************** *** 233,238 **** --- 233,239 ---- Uid => 1, Debug => $debugimap, Timeout => $timeout2, + Socketargs => [ SSL_verify_mode => 0 ], ) ; if(!$starttls2) { $common{'Ssl'} = $ssl2;とした、pop2imap_noacを利用。ただし versrion指定があって、
Version note: attribute added in Mail::IMAPClient 3.34の模様。現在の時点では 3.40 。