GmailのSMTPサーバをWanderlustから利用してみようと思ったのですがうまくいきません。
2chのWanderlustスレの話題と同じ現象に見えます。でも私が使ってるlimit-1_14ブランチにも、 ここらへんのパッチも当たってるはずなのですけどねぇ 😕
SMTP over SSLの場合
465/tcpポートを使った、最初からSSL接続になるやりかたです。
~/.wl設定
(setq wl-smtp-posting-server "smtp.gmail.com"
wl-smtp-posting-port 465
wl-smtp-connection-type 'ssl
)
ほんとは認証用にwl-smtp-posting-userの設定も必要ですが省略しています。
この状態でメール送信を試みてもSMTP error
がミニバッファに表示され、うまくいきません。opensslをコマンドラインから実行してみると、RCPT TOのあとにRENEGOTIATINGとでてきます。はじめてみるレスポンスですが何かしらコマンドラインオプションに不備があるのでしょうか 😕
$ openssl s_client -connect smtp.gmail.com:465 -CApath /etc/ssl/certs
:
220 mx.gmail.com ESMTP z80sm1155576pyg
EHLO localhost.example.jp
250-mx.gmail.com at your service
250-SIZE 20971520
250-8BITMIME
250-AUTH LOGIN PLAIN
250 ENHANCEDSTATUSCODES
AUTH PLAIN ********************************************
235 2.7.0 Accepted
MAIL FROM:<someone@example.com>
250 2.1.0 OK
RCPT TO:<someone@example.net>
RENEGOTIATING
depth=1 /C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
verify return:1
depth=0 /C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
verify return:1
starttlsの場合
587/tcpポートを使った、途中からSSL接続に遷移するやりかたです。ちなみに587/tcpはsubmission用であって、starttls用に予約されているポート番号ではありません。
~/.wl設定
(setq wl-smtp-posting-server "smtp.gmail.com"
wl-smtp-posting-port 587
wl-smtp-connection-type 'stattls
)
Wanderlustのドキュメントによれば、starttlsパッケージが必要になりますので、インストールしておきます。
$ wget ftp://opaopa.org/pub/elisp/starttls-0.10.tar.gz
$ tar xzvf starttls-0.10.tar.gz
$ cd starttls-0.10
$ ./configure && make && sudo make install
やはりSMTP error
になります 🙁
opensslのstarttlsを使う場合
新しめのopensslはs_clientでのstarttlsもサポートしています。
openssl s_client -starttls smtp ...
メールを送信するときのSSL接続はwl-draft.elのwl-smtp-extension-bindというマクロでおこなわれるように見えます。
このマクロが使われるのはwl-draft-send-mail-with-smtpからにこれまた見えますので、直前で一番近いwl-mail-send-pre-hookでopensslコマンドのオプションを設定するようにしてみました。
~/.wl設定
(setq wl-smtp-posting-server "smtp.gmail.com"
wl-smtp-posting-port 587
wl-smtp-connection-type 'ssl
)
(add-hook 'wl-mail-send-pre-hook
(lambda ()
(set (make-local-variable 'ssl-program-arguments)
'("s_client"
"-starttls" "smtp"
"-host" host
"-port" service
"-verify" (int-to-string ssl-certificate-verification-policy)
"-CApath" "/etc/ssl/certs/"))
))
portはstarttls用587とし、connection-typeはsslにする(こうしないとopensslコマンド呼び出しになりません)のがみそです。
が、うまくいきません。SMTP接続のtraceバッファを見ると、
9810:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:601:
のようにいきなりSSL接続しているようなので、”-starttls smtp”を設定するhookが効いていないようです orz