何かの拍子に Wanderlust でメールが送れなくなった.*Message* には
Invalid response: AUTH PLAIN <文字列>
とあって,送信している情報を受信情報と勘違いしているらしい.SMTP なので,Wanderlust というか FLIM でコケているわけだが,ということで該当箇所は smtp.el の中.
いろいろ試していると,たまに送れる場合もあって,どうやらサーバのレスポンスが若干悪いか,その付近の同期処理(そもそも実装されてる?)に問題があるらしい (それ以上は調べられず).
追記(2015/8/28)
これ,どうやら AUTH PLAIN を送る前にコケているような気がしてきた.サーバー側の問題なような気がするが,icedove 等を使うと送信できるので良くわからない.
Process SMTP connection broken by remote peer EHLO smtp.example.org 250-mail1.example.org 250-PIPELINING 250-SIZE 52428800 250-ETRN 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN 421 4.7.0 mail1.example.org Error: too many errors AUTH PLAIN <文字列>
追記(2015/8/28)
たまに送れるのは,smtp 側で load balancer が動いているらしく,smtp.example.org から mail1.example.org に送られる場合は OK で mail2.example.org の場合は NG という,なんとも感じ悪い状況.
追記(2015/8/28)
この手の STARTTLS を使った SMTP を手動で送るやり方を見つけたのでメモ.
% gnutls-cli --crlf --x509cafile /etc/ssl/certs/ca-certificates.crt --port 587 --starttls-proto=smtp smtp.example.org Processed 180 CA certificate(s). Resolving 'smtp.example.org'... Connecting to 'XXX.XX.X.XXX:587'... - Certificate type: X.509 - Got a certificate list of 2 certificates. - Certificate[0] info: 略 - Certificate[1] info: 略 - Status: The certificate is trusted. - Description: (TLS1.2)-(RSA)-(AES-128-GCM) - Session ID: 略 - Version: TLS1.2 - Key Exchange: RSA - Cipher: AES-128-GCM - MAC: AEAD - Compression: NULL - Options: safe renegotiation, - Handshake was completed - Simple Client Mode: EHLO smtp.example.org 250-mail1.example.org 250-PIPELINING 250-SIZE 52428800 250-ETRN 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH PLAIN 略 235 2.7.0 Authentication successful MAIL FROM:<myn@example.org> 250 2.1.0 Ok RCPT TO:<myn@example.org> 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> To: myn@example.org From: myn@example.org Subject: test test --myn . 250 2.0.0 Ok: queued as 略 quit 221 2.0.0 Bye - Peer has closed the GnuTLS connection
追記(2015/8/28)
ちなみに AUTH PLAIN の後の文字列は以下のようにユーザ名とパスワードから作る.
echo -n '\0username\0password' | base64 AHVzZXJuYW1lAHBhc3N3b3Jk
デコードするには base64 -d に pipe で送ればいい.