色々あって、gnutls-cliをopensslの代わりにも利用することにしました。 元々opensslを利用しているところは私が把握している限りでは2つあって、ひとつはSMTP over SSL/TLSでメールを送信する時で、もうひとつはIMAP4/NNTP/POP3 over SSL/TLSでフォルダにアクセスする時です。
まず、open-tls-stream関数が接続に失敗してもエラーにならない為、失敗した時にエラーになるようなラッパーを用意します。 こうしておかないと、(少なくともフォルダへのアクセスの際に) 接続に失敗すると永遠にリトライし続けます。 adviceでやってもいいような気はしますが、一応元の関数の挙動はそのままにしておきます。
(defun open-tls-stream-with-error (name buffer host port)
"Wrapper function for `open-tls-stream'. This raises error when failed to connect."
(let ((result (open-tls-stream name buffer host port)))
(if (and (processp result)
(eq (process-status result) 'run))
result
;; raise error when failed.
(error "Opening tls stream is failed"))))
次に、SMTP over SSL/TLSの設定です。 Wanderlustへはきれいにadviceをかけにくいような気がしたので、FLIMにadviceをかけています。
;; Use tls.el for smtp over SSL/TLS
(autoload 'open-tls-stream "tls")
(defadvice smtp-send-buffer (around use-tls-hack activate)
(let ((smtp-open-connection-function
(if (eq smtp-open-connection-function 'open-ssl-stream)
'open-tls-stream-with-error
smtp-open-connection-function)))
ad-do-it))
最後に、フォルダアクセス用の設定です。 こちらだけを使う場合は、SMTP向けの部分にあるautoloadは不要なはずです。 基本的にはすがわらさんの設定と変わりないですが、前述の通り、open-tls-streamを直接使わない方がよいと思います。
;; Use tls.el for over SSL/TLS folder access
(eval-after-load "elmo-vars"
'(set-alist 'elmo-network-stream-type-alist "!"
'(ssl tls open-tls-stream-with-error)))
ちなみに、Emacs24の場合は、可能ならopen-gnutls-streamを使うといいかもしれませんが、確認はしていません。
タグ:Wanderlust
コメント (0件)
Kazuhiro's blog
http://ikazuhiro.s206.xrea.com/article.php/2011052211434584