emacs > mewがCreating an SSL TLS connection...で固まる

emacs に mew を入れて、smtp ssl で sakura.ne.jp の mail サーバからメール送信しようとしたら、ミニバッファに
Creating an SSL/TLS connection...
と出たっきりemacsが固まってしまって送信できない。なにこれ。と格闘すること2日。インターネット上に見つかる解決法をあれもこれも試すもどれも効果なし。
ようやく動くようになったという歴史の記録。

まず言っておこう。

1. mew は /etc/stunnel/stunnel.conf を見ていない。

2. mew は 毎回 /usr/bin/stunnel4 /tmp/12204n3m/mew122042gt の様に stunnel4 コマンドを実行する。だから stunnel4 をデーモンにする必要はない。
$ sudo emacs /etc/default/stunnel4
ENABLED=0 ; つまり0のままでいい

3. 以下はdefault設定だから .mew.el に書く必要ない
(setq mew-prog-ssl "mewstunnel");stunnel4のラッパー
(setq mew-ssl-cert-directory "/etc/ssl/certs")
(setq mew-ssl-verify-level 2)

4. /etc/hosts.allow に ALL: 127.0.0.1 と追記しなくても動いた

5. stunnel: Downloadsから最新のstunnel(ていうかstunnel3)を落として、./configure --disable-libwrap しても動かなかった。

6. sakura.ne.jp の CA 「GeoTrust Global CA」を https://www.geotrust.com/resources/root_certificates/certificates/GeoTrust_Global_CA.cer から落として来て入れようと思ったら、apt-get ca-certificates した時点で既に /etc/ssl/certs に入ってた。



いっとくけどね、

固まるときのプロセスをもう一度見ると
$ ps -ef | egrep stunn
/usr/bin/stunnel4 /tmp/kobapan9718sjl/mew97187Ms

これって、/usr/bin/stunnel4 /etc/stunnel/stunnel.conf だと思って格闘してきたけど、mew-ssl.el の出力する tmpファイルで stunnel4 を起動してるってことだからね。



ここらで結論

Creating an SSL/TLS connection...
のメッセージが出たまま動かないときは、、
.mew.el に
(setq mew-debug t)
と書いてエラーを起こして
Ctrl+g で送信を中止して
Mew debug* を見てみる

SSL_connect: 1408F10B: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
とか言われてるときは、↓これが怪しい

[mew-dist 27574] IMAP/TLS>>http://www.mew.org/ml-archives/mew-dist/2007-February/027261.html
IMAP/TLS を使おうとすると刺さってしまいます.
Index: mew-ssl.el
RCS file: /cvsmew/mew/mew-ssl.el,v
retrieving revision 1.44
diff -r1.44 mew-ssl.el
102c102
(if tls (insert (format "protocol=%s\nsslVersion=TLSv1\n" tls)))
このようにすると刺さらない


つまり、
mew-smtp.el L 442
(when (and sslp (mew-port-equal port sslport))
(setq tlsp t)
;; let stunnel know that a wrapper protocol is SMTP
(setq tls mew-tls-smtp))
↑この条件式 when 通んないと、

mew-ssl.el:L 111
(if tls (insert (format "protocol=%s\nsslVersion=TLSv1\n" tls)))
この行がtmpファイルに書かれないよね!

ということで、.mew.el の設定
(setq mew-config-alist '(

("smtp-ssl" . t) ; ← sslp
("smtp-port" . "587") ; ← port
("smtp-ssl-port" . "587") ; ← sslport
この3つが必須!
それだけ!

私と同じハマり方しないように言っておくけど、
("smtp-port" . "submission")
("smtp-ssl-port" . "587")
の組み合わせは、だめだかんね。
最終更新:2014年12月22日 13:00