[Mew-dist 14923] smtp AUTH LOGIN

Takashi SATOH satoh at example.com
2000年 11月 19日 (日) 01:13:09 JST


さとーと申します。

smtp auth については、

From: Kazu Yamamoto (山本和彦) <kazu at example.com>
Subject: [Mew-dist 12921] Re: mew-1.95b33.tar.gz
Date: Tue, 25 Apr 2000 15:30:21 +0900

>はい。今のところ、CRAM-MD5 だけサポートしています。
>
>> RFC に書いていない
>> 
>> AUTH LOGIN
>> 
>> のサポートは行わないのですよね。たぶん
>
>これは POP の USER/PASS をサポートする程度の意味合いでしょうから、実装
>するけど推奨しないことになるのでしょうね。

という状態のままになっていると思いますが、
AUTH LOGIN が必要になったので、使えるようにしてしまいました。

mew-config-alist の中に、
("smtp-auth" . login)
("smtp-user" . "satoh")
と書いておくと、送信時に LOGIN: とミニバッファでパスワードを聞かれます。

あまり必要な人もいないかとは思いますが、
パッチにして添付しておきます。

-------------- next part --------------
*** mew-smtp.el.orig	Wed Nov  1 20:27:03 2000
--- mew-smtp.el	Sun Nov 19 00:35:55 2000
***************
*** 96,103 ****
  (defvar mew-smtp-fsm
    '(("greeting"  ("220" . "ehlo"))
      ("ehlo"      ("250" . "auth") (t . "helo"))
!     ("auth"      ("334" . "challenge"))
      ("challenge" ("235" . "mail-from"))
      ("helo"      ("250" . "mail-from"))
      ("mail-from" ("250" . "rcpt-to"))
      ("rcpt-to"   ("250" . "data"))
--- 96,106 ----
  (defvar mew-smtp-fsm
    '(("greeting"  ("220" . "ehlo"))
      ("ehlo"      ("250" . "auth") (t . "helo"))
!     ("cram-md5"  ("334" . "challenge"))
      ("challenge" ("235" . "mail-from"))
+     ("login"     ("334" . "user"))
+     ("user"      ("334" . "password"))
+     ("password"  ("235" . "mail-from"))
      ("helo"      ("250" . "mail-from"))
      ("mail-from" ("250" . "rcpt-to"))
      ("rcpt-to"   ("250" . "data"))
***************
*** 289,295 ****
         (if (null next)
  	   (progn
  	     (mew-passwd-set-passwd mew-draft-smtp-server nil)
! 	     (if (string= status "challenge")
  		 (message "Password is wrong."))
  	     (mew-smtp-recover pnm str))
  	 (mew-smtp-set-status pnm next)
--- 292,298 ----
         (if (null next)
  	   (progn
  	     (mew-passwd-set-passwd mew-draft-smtp-server nil)
! 	     (if (or (string= status "challenge") (string= status "password"))
  		 (message "Password is wrong."))
  	     (mew-smtp-recover pnm str))
  	 (mew-smtp-set-status pnm next)
***************
*** 320,325 ****
--- 323,357 ----
     pro (format "HELO %s%s" mew-draft-smtp-helo-domain mew-cs-eol)))
  
  (defun mew-smtp-command-auth (pro pnm)
+   (let ((auth mew-draft-smtp-auth))
+     (cond
+      ((eq auth 'login)
+       (mew-smtp-set-status pnm "login")
+       (mew-smtp-command-login pro pnm))
+      ((eq auth 'cram-md5)
+       (mew-smtp-set-status pnm "cram-md5")
+       (mew-smtp-command-cram-md5 pro pnm))
+      (t
+       (mew-smtp-set-status pnm "mail-from")
+       (mew-smtp-command-mail-from pro pnm)))))
+ 
+ (defun mew-smtp-command-login (pro pnm)
+   (if (string-match "AUTH .*LOGIN" (mew-smtp-get-string pnm))
+       (process-send-string pro (format "AUTH LOGIN%s" mew-cs-eol))
+     (mew-smtp-debug "<AUTH>" "(SMTP server does not support LOGIN)\n")
+     (mew-smtp-set-status pnm "mail-from")
+     (mew-smtp-command-mail-from pro pnm)))
+ 
+ (defun mew-smtp-command-user (pro pnm)
+   (process-send-string pro (format "%s%s" (mew-base64-encode-string mew-draft-smtp-user) mew-cs-eol)))
+ 
+ (defun mew-smtp-command-password (pro pnm)
+   (let (passwd)
+     (setq passwd (mew-input-passwd "LOGIN: " mew-draft-smtp-server))
+     (process-send-string
+      pro (format "%s%s" (mew-base64-encode-string passwd) mew-cs-eol))))
+ 
+ (defun mew-smtp-command-cram-md5 (pro pnm)
    (if (and mew-draft-smtp-auth
  	   (string-match "AUTH .*CRAM-MD5" (mew-smtp-get-string pnm)))
        (process-send-string pro (format "AUTH CRAM-MD5%s" mew-cs-eol))


Mew-dist メーリングリストの案内