From jidzikowski at common-lisp.net Sat Dec 10 21:00:18 2005 From: jidzikowski at common-lisp.net (Jan Idzikowski) Date: Sat, 10 Dec 2005 22:00:18 +0100 (CET) Subject: [cl-smtp-cvs] CVS update: cl-smtp/CHANGELOG cl-smtp/cl-smtp.asd cl-smtp/cl-smtp.lisp Message-ID: <20051210210018.AF3DC8858C@common-lisp.net> Update of /project/cl-smtp/cvsroot/cl-smtp In directory common-lisp.net:/tmp/cvs-serv3441 Modified Files: CHANGELOG cl-smtp.asd cl-smtp.lisp Log Message: add new key authentication to send-email, send-smtp for for smtp authentication PLAIN and LOGIN, :authentication value list '(:plain "username" "password") or '(:login "username" "password") Date: Sat Dec 10 22:00:11 2005 Author: jidzikowski Index: cl-smtp/CHANGELOG diff -u cl-smtp/CHANGELOG:1.1.1.1 cl-smtp/CHANGELOG:1.2 --- cl-smtp/CHANGELOG:1.1.1.1 Tue Nov 1 19:34:57 2005 +++ cl-smtp/CHANGELOG Sat Dec 10 22:00:10 2005 @@ -1,3 +1,9 @@ +Version 20051210.1 +2005-12-10 +"ADD" key authentication for smtp authentication: '(:plain "username" "password") +or '(:login "username" "password") +add dependency to CL-BASE64 except allegro + Version 20050729.1 2005-07-29 "CHANGE" license from LGPL to LLGPL Index: cl-smtp/cl-smtp.asd diff -u cl-smtp/cl-smtp.asd:1.1.1.1 cl-smtp/cl-smtp.asd:1.2 --- cl-smtp/cl-smtp.asd:1.1.1.1 Tue Nov 1 19:34:57 2005 +++ cl-smtp/cl-smtp.asd Sat Dec 10 22:00:10 2005 @@ -26,7 +26,9 @@ (in-package :cl-smtp) (asdf:defsystem :cl-smtp - :version "20050729.1" + :version "20051210.1" + :depends-on + (#-allegro :cl-base64) :components (#+sbcl(:file "sbcl") #+allegro(:file "acl") Index: cl-smtp/cl-smtp.lisp diff -u cl-smtp/cl-smtp.lisp:1.1.1.1 cl-smtp/cl-smtp.lisp:1.2 --- cl-smtp/cl-smtp.lisp:1.1.1.1 Tue Nov 1 19:34:57 2005 +++ cl-smtp/cl-smtp.lisp Sat Dec 10 22:00:10 2005 @@ -57,32 +57,29 @@ (mask str)) resultstr)) +(defun string-to-base64-string (str) + #+allegro (excl:string-to-base64-string str) + #-allegro (cl-base64:string-to-base64-string str)) + (defun send-email (host from to subject message &key (port 25) cc bcc reply-to extra-headers - display-name) + display-name authentication) (send-smtp host from (check-arg to "to") subject (mask-dot message) :port port :cc (check-arg cc "cc") :bcc (check-arg bcc "bcc") :reply-to reply-to :extra-headers extra-headers - :display-name display-name)) + :display-name display-name + :authentication authentication)) (defun send-smtp (host from to subject message &key (port 25) cc bcc reply-to extra-headers - display-name) + display-name authentication) (let ((sock (socket-stream (make-smtp-socket host port)))) (unwind-protect (progn - (multiple-value-bind (code msgstr) - (read-from-smtp sock) - (when (/= code 220) - (error "wrong response from smtp server: ~A" msgstr))) - (write-to-smtp sock (format nil "HELO ~A" (get-host-name))) - (multiple-value-bind (code msgstr) - (read-from-smtp sock) - (when (/= code 250) - (error "wrong response from smtp server: ~A" msgstr))) + (open-smtp-connection sock :authentication authentication) (write-to-smtp sock (format nil "MAIL FROM:~@[~A ~]<~A>" display-name from)) (multiple-value-bind (code msgstr) @@ -132,6 +129,55 @@ (error "in QUIT command:: ~A" msgstr)))) (close sock)))) +(defun open-smtp-connection (sock &key authentication) + (multiple-value-bind (code msgstr) + (read-from-smtp sock) + (when (/= code 220) + (error "wrong response from smtp server: ~A" msgstr))) + (cond + (authentication + (write-to-smtp sock (format nil "EHLO ~A" (get-host-name))) + (multiple-value-bind (code msgstr) + (read-from-smtp sock) + (when (/= code 250) + (error "wrong response from smtp server: ~A" msgstr))) + (cond + ((eq (car authentication) :plain) + (write-to-smtp sock (format nil "AUTH PLAIN ~A" + (string-to-base64-string + (format nil "~A~C~A~C~A" (cadr authentication) + #\null (cadr authentication) #\null + (caddr authentication))))) + (multiple-value-bind (code msgstr) + (read-from-smtp sock) + (when (/= code 235) + (error "plain authentication failed: ~A" msgstr)))) + ((eq (car authentication) :login) + (write-to-smtp sock "AUTH LOGIN") + (multiple-value-bind (code msgstr) + (read-from-smtp sock) + (when (/= code 334) + (error "login authentication failed: ~A" msgstr))) + (write-to-smtp sock (string-to-base64-string (cadr authentication))) + (multiple-value-bind (code msgstr) + (read-from-smtp sock) + (when (/= code 334) + (error "login authentication send username failed: ~A" msgstr))) + (write-to-smtp sock (string-to-base64-string (caddr authentication))) + (multiple-value-bind (code msgstr) + (read-from-smtp sock) + (when (/= code 235) + (error "login authentication send password failed: ~A" msgstr)))) + (t + (error "authentication ~A is not supported in cl-smtp" + (car authentication))))) + (t + (write-to-smtp sock (format nil "HELO ~A" (get-host-name))) + (multiple-value-bind (code msgstr) + (read-from-smtp sock) + (when (/= code 250) + (error "wrong response from smtp server: ~A" msgstr)))))) + (defun compute-rcpt-command (sock adresses) (dolist (to adresses) From jidzikowski at common-lisp.net Sun Dec 11 20:45:56 2005 From: jidzikowski at common-lisp.net (Jan Idzikowski) Date: Sun, 11 Dec 2005 21:45:56 +0100 (CET) Subject: [cl-smtp-cvs] CVS update: cl-smtp/CHANGELOG cl-smtp/README cl-smtp/cl-smtp.asd cl-smtp/cl-smtp.lisp Message-ID: <20051211204556.9895688567@common-lisp.net> Update of /project/cl-smtp/cvsroot/cl-smtp In directory common-lisp.net:/tmp/cvs-serv14910 Modified Files: CHANGELOG README cl-smtp.asd cl-smtp.lisp Log Message: add :cl-smtp-authentication for reader macro Date: Sun Dec 11 21:45:54 2005 Author: jidzikowski Index: cl-smtp/CHANGELOG diff -u cl-smtp/CHANGELOG:1.2 cl-smtp/CHANGELOG:1.3 --- cl-smtp/CHANGELOG:1.2 Sat Dec 10 22:00:10 2005 +++ cl-smtp/CHANGELOG Sun Dec 11 21:45:54 2005 @@ -1,8 +1,15 @@ +Version 20051211.1 +2005-12-11 +add :cl-smtp-authentication for reader macro, that you can use cl-smtp with and +without authentication support +Change cl-smtp.asd, cl-smtp.lisp, README, CHANGELOG + Version 20051210.1 2005-12-10 "ADD" key authentication for smtp authentication: '(:plain "username" "password") or '(:login "username" "password") add dependency to CL-BASE64 except allegro +Change cl-smtp.asd, cl-smtp.lisp, CHANGELOG Version 20050729.1 2005-07-29 Index: cl-smtp/README diff -u cl-smtp/README:1.1.1.1 cl-smtp/README:1.2 --- cl-smtp/README:1.1.1.1 Tue Nov 1 19:34:57 2005 +++ cl-smtp/README Sun Dec 11 21:45:54 2005 @@ -2,14 +2,24 @@ CL-SMTP is a simple lisp smtp client. It works in ACL, SBCL, CMUCL, OPENMCL, LISPWORKS and CLISP. +new with authentication support for PLAIn and LOGIN authentication method + See INSTALL for prerequisites and build details. To use cl-smtp: (asdf:operate 'asdf:load-op 'cl-smtp) +For use cl-smtp with authentication support you need cl-base64 package and +add :cl-smtp-authentication to features + +(push :cl-smtp-authentication *features*) +(asdf:operate 'asdf:load-op 'cl-smtp) + +------------------------------------------------ + (cl-smtp:send-email host from to subject message - &key (port 25) cc bcc reply-to extra-headers) + &key (port 25) cc bcc reply-to extra-headers authentication) Arguments: - host (String) : hostname or ip-adress of the smtpserver @@ -21,8 +31,11 @@ - cc (String or Cons of Strings) : email adress carbon copy - bcc (String or Cons of Strings): email adress blind carbon copy - reply-to (String) : email adress - - diplayname (String) : diplayname of the sender + - displayname (String) : displayname of the sender - extra-headers (Cons) : extra headers as alist + - authentication (Cons) : list with 3 elements + (:method "username" "password") + method is a keyword :plain or :login Returns nil or error with message @@ -36,4 +49,4 @@ (setf cl-smtp::*x-mailer* "my x-mailer string) If you find bugs or want to send patches for enhancements, by email to -Jan Idzikowski . +Jan Idzikowski Index: cl-smtp/cl-smtp.asd diff -u cl-smtp/cl-smtp.asd:1.2 cl-smtp/cl-smtp.asd:1.3 --- cl-smtp/cl-smtp.asd:1.2 Sat Dec 10 22:00:10 2005 +++ cl-smtp/cl-smtp.asd Sun Dec 11 21:45:54 2005 @@ -26,9 +26,12 @@ (in-package :cl-smtp) (asdf:defsystem :cl-smtp - :version "20051210.1" - :depends-on - (#-allegro :cl-base64) + :version "20051211.1" + :depends-on + #+(and cl-smtp-authentication (not allegro)) + (:cl-base64) + #-cl-smtp-authentication + () :components (#+sbcl(:file "sbcl") #+allegro(:file "acl") Index: cl-smtp/cl-smtp.lisp diff -u cl-smtp/cl-smtp.lisp:1.2 cl-smtp/cl-smtp.lisp:1.3 --- cl-smtp/cl-smtp.lisp:1.2 Sat Dec 10 22:00:10 2005 +++ cl-smtp/cl-smtp.lisp Sun Dec 11 21:45:54 2005 @@ -58,8 +58,10 @@ resultstr)) (defun string-to-base64-string (str) - #+allegro (excl:string-to-base64-string str) - #-allegro (cl-base64:string-to-base64-string str)) + (declare (ignorable str)) + #+(and cl-smtp-authentication allegro) (excl:string-to-base64-string str) + #+(and cl-smtp-authentication (not allegro)) + (cl-base64:string-to-base64-string str)) (defun send-email (host from to subject message @@ -76,6 +78,9 @@ (defun send-smtp (host from to subject message &key (port 25) cc bcc reply-to extra-headers display-name authentication) + #-cl-smtp-authentication + (when authentication + (error "cl-smtp was not compiled with authentication support, push :cl-smtp-authentication to *features* bevor load cl-smtp.asd")) (let ((sock (socket-stream (make-smtp-socket host port)))) (unwind-protect (progn From jidzikowski at common-lisp.net Tue Dec 20 14:37:58 2005 From: jidzikowski at common-lisp.net (Jan Idzikowski) Date: Tue, 20 Dec 2005 15:37:58 +0100 (CET) Subject: [cl-smtp-cvs] CVS update: cl-smtp/CHANGELOG cl-smtp/README cl-smtp/cl-smtp.asd cl-smtp/cl-smtp.lisp cl-smtp/clisp.lisp Message-ID: <20051220143758.F1FF288161@common-lisp.net> Update of /project/cl-smtp/cvsroot/cl-smtp In directory common-lisp.net:/tmp/cvs-serv15472 Modified Files: CHANGELOG README cl-smtp.asd cl-smtp.lisp clisp.lisp Log Message: add win32 support for clisp, remove :cl-smtp-authentication, always use CL-BASE64 Date: Tue Dec 20 15:37:54 2005 Author: jidzikowski Index: cl-smtp/CHANGELOG diff -u cl-smtp/CHANGELOG:1.3 cl-smtp/CHANGELOG:1.4 --- cl-smtp/CHANGELOG:1.3 Sun Dec 11 21:45:54 2005 +++ cl-smtp/CHANGELOG Tue Dec 20 15:37:51 2005 @@ -1,6 +1,13 @@ +Version 20051220.1 +2005-12-20 +"ADD" win32 support for clisp +"REMOVE" :cl-smtp-authentication +"CHANGE" always use CL-BASE64 package +Change cl-smtp.asd, cl-smtp.lisp, clisp.lisp, README, CHANGELOG + Version 20051211.1 2005-12-11 -add :cl-smtp-authentication for reader macro, that you can use cl-smtp with and +"ADD" :cl-smtp-authentication for reader macro, that you can use cl-smtp with and without authentication support Change cl-smtp.asd, cl-smtp.lisp, README, CHANGELOG Index: cl-smtp/README diff -u cl-smtp/README:1.2 cl-smtp/README:1.3 --- cl-smtp/README:1.2 Sun Dec 11 21:45:54 2005 +++ cl-smtp/README Tue Dec 20 15:37:52 2005 @@ -2,18 +2,14 @@ CL-SMTP is a simple lisp smtp client. It works in ACL, SBCL, CMUCL, OPENMCL, LISPWORKS and CLISP. -new with authentication support for PLAIn and LOGIN authentication method +new with authentication support for PLAIN and LOGIN authentication method + +used CL-BASE64 package See INSTALL for prerequisites and build details. To use cl-smtp: -(asdf:operate 'asdf:load-op 'cl-smtp) - -For use cl-smtp with authentication support you need cl-base64 package and -add :cl-smtp-authentication to features - -(push :cl-smtp-authentication *features*) (asdf:operate 'asdf:load-op 'cl-smtp) ------------------------------------------------ Index: cl-smtp/cl-smtp.asd diff -u cl-smtp/cl-smtp.asd:1.3 cl-smtp/cl-smtp.asd:1.4 --- cl-smtp/cl-smtp.asd:1.3 Sun Dec 11 21:45:54 2005 +++ cl-smtp/cl-smtp.asd Tue Dec 20 15:37:52 2005 @@ -26,12 +26,9 @@ (in-package :cl-smtp) (asdf:defsystem :cl-smtp - :version "20051211.1" + :version "20051220.1" :depends-on - #+(and cl-smtp-authentication (not allegro)) (:cl-base64) - #-cl-smtp-authentication - () :components (#+sbcl(:file "sbcl") #+allegro(:file "acl") Index: cl-smtp/cl-smtp.lisp diff -u cl-smtp/cl-smtp.lisp:1.3 cl-smtp/cl-smtp.lisp:1.4 --- cl-smtp/cl-smtp.lisp:1.3 Sun Dec 11 21:45:54 2005 +++ cl-smtp/cl-smtp.lisp Tue Dec 20 15:37:52 2005 @@ -59,9 +59,8 @@ (defun string-to-base64-string (str) (declare (ignorable str)) - #+(and cl-smtp-authentication allegro) (excl:string-to-base64-string str) - #+(and cl-smtp-authentication (not allegro)) - (cl-base64:string-to-base64-string str)) + #+allegro (excl:string-to-base64-string str) + #-allegro (cl-base64:string-to-base64-string str)) (defun send-email (host from to subject message @@ -78,9 +77,6 @@ (defun send-smtp (host from to subject message &key (port 25) cc bcc reply-to extra-headers display-name authentication) - #-cl-smtp-authentication - (when authentication - (error "cl-smtp was not compiled with authentication support, push :cl-smtp-authentication to *features* bevor load cl-smtp.asd")) (let ((sock (socket-stream (make-smtp-socket host port)))) (unwind-protect (progn Index: cl-smtp/clisp.lisp diff -u cl-smtp/clisp.lisp:1.1.1.1 cl-smtp/clisp.lisp:1.2 --- cl-smtp/clisp.lisp:1.1.1.1 Tue Nov 1 19:34:57 2005 +++ cl-smtp/clisp.lisp Tue Dec 20 15:37:52 2005 @@ -20,7 +20,10 @@ (defun make-smtp-socket (host port) (handler-case - (socket:socket-connect port host :element-type 'character) + (socket:socket-connect port host :element-type 'character + :external-format + (ext:make-encoding :charset charset:utf-8 + :line-terminator :unix)) (serious-condition (e) (error "could not create client socket:~A" e)))) @@ -28,4 +31,8 @@ socket) (defun get-host-name () - (linux:gethostname 256)) + #+linux(linux:gethostname 256) + #-linux(let ((str (machine-instance))) + (if (position #\Space str) + (subseq str 0 (position #\Space str)) + str))) From jidzikowski at common-lisp.net Tue Dec 20 14:44:14 2005 From: jidzikowski at common-lisp.net (Jan Idzikowski) Date: Tue, 20 Dec 2005 15:44:14 +0100 (CET) Subject: [cl-smtp-cvs] CVS update: cl-smtp/cl-smtp.asd Message-ID: <20051220144414.31C758855E@common-lisp.net> Update of /project/cl-smtp/cvsroot/cl-smtp In directory common-lisp.net:/tmp/cvs-serv16007 Modified Files: cl-smtp.asd Log Message: cl-base64 not load in allegro Date: Tue Dec 20 15:44:13 2005 Author: jidzikowski Index: cl-smtp/cl-smtp.asd diff -u cl-smtp/cl-smtp.asd:1.4 cl-smtp/cl-smtp.asd:1.5 --- cl-smtp/cl-smtp.asd:1.4 Tue Dec 20 15:37:52 2005 +++ cl-smtp/cl-smtp.asd Tue Dec 20 15:44:06 2005 @@ -28,7 +28,8 @@ (asdf:defsystem :cl-smtp :version "20051220.1" :depends-on - (:cl-base64) + #-allegro (:cl-base64) + #+allegro () :components (#+sbcl(:file "sbcl") #+allegro(:file "acl")