From ehuels at gmail.com Sun May 20 20:33:47 2007 From: ehuels at gmail.com (Erik Huelsmann) Date: Sun, 20 May 2007 22:33:47 +0200 Subject: [cl-smtp-devel] Re: cl-smtp usocket In-Reply-To: <4d706100705150719p726bce81ib205da705311026f@mail.gmail.com> References: <4d706100705150719p726bce81ib205da705311026f@mail.gmail.com> Message-ID: On 5/15/07, idzikowski wrote: > Hello Erik, > > sorry for no answer to your mail to the cl-smtp-devel list from Apr 7 2007, > i never got this message. > > Your suggestion to use usocket is a good idea, > send me the patch and put it in the cvs, but i have not all supported > lisp implementations installed to test ist. I can test it with > acl/sbcl/cmucl/clisp on linux and some on windows. Please find attached the patch to move cl-smtp to usocket. Note that there's no need for any platform specific stuff any more, apart from the cl-base64 conditionals. Note that you need Subversion trunk usocket to test this patch. Also, I added usocket::get-host-name, but I'm not sure I want it to be part of the exported interface. I'll support the function on all current and new implementations though. Also, locally, I removed all sockets-compat-layer files (but the patch doesn't seem able to convey this): rm acl.lisp clisp.lisp lispworks.lisp openmcl.lisp sbcl.lisp cmucl.lisp The remainder of the patch (including updates to CHANGELOG, INSTALL and README, but without the version increment in cl-smtp.asd): Index: CHANGELOG =================================================================== RCS file: /project/cl-smtp/cvsroot/cl-smtp/CHANGELOG,v retrieving revision 1.5 diff -u -r1.5 CHANGELOG --- CHANGELOG 4 Apr 2006 13:04:40 -0000 1.5 +++ CHANGELOG 20 May 2007 20:31:07 -0000 @@ -1,3 +1,10 @@ +Version .........1 +2007-??-?? +Remove implementation dependent sockets code by adding usocket dependency. +Change cl-smtp.asd cl-smtp.lisp README INSTALL + (remove acl.lisp clisp.lisp cmucl.lisp sbcl.lisp lispworks.lisp openmcl.lisp) + + Version 20060404.1 2006-04-04 "ADD" support for attachment, thanks Brian Sorg for the implementation Index: INSTALL =================================================================== RCS file: /project/cl-smtp/cvsroot/cl-smtp/INSTALL,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 INSTALL --- INSTALL 1 Nov 2005 18:34:57 -0000 1.1.1.1 +++ INSTALL 20 May 2007 20:31:07 -0000 @@ -1,10 +1,12 @@ -CL-SMTP works in ACL, SBCL, CMUCL, OPENMCL, LISPWORKS and CLISP. +CL-SMTP works in all implementations supported by its dependencies. -For SBCL you need sb-bsd-sockets. +For all implementations you'll need usocket +and cl-base64 (the latter isn't a requirement on ACL). CL-SMTP has a asdf system definition file. -load this file: + +To load this file: (asdf:operate 'asdf:load-op 'cl-smtp) Index: README =================================================================== RCS file: /project/cl-smtp/cvsroot/cl-smtp/README,v retrieving revision 1.5 diff -u -r1.5 README --- README 24 May 2006 10:46:22 -0000 1.5 +++ README 20 May 2007 20:31:07 -0000 @@ -1,10 +1,11 @@ -CL-SMTP is a simple lisp smtp client. -It works in ACL, SBCL, CMUCL, OPENMCL, LISPWORKS and CLISP. +CL-SMTP is a simple lisp smtp client. +It works in all lisp implementations supported by its dependencies. -new with support for send attachments, thanks Brian Sorg for the implementation+New with support for send attachments, + thanks Brian Sorg for the implementation. -with authentication support for PLAIN and LOGIN authentication method +With authentication support for PLAIN and LOGIN authentication method used CL-BASE64 package Index: cl-smtp.asd =================================================================== RCS file: /project/cl-smtp/cvsroot/cl-smtp/cl-smtp.asd,v retrieving revision 1.6 diff -u -r1.6 cl-smtp.asd --- cl-smtp.asd 4 Apr 2006 13:04:40 -0000 1.6 +++ cl-smtp.asd 20 May 2007 20:31:07 -0000 @@ -20,32 +20,13 @@ (:use :cl :asdf) (:export :send-email)) -#+sbcl (require :sb-bsd-sockets) - - (in-package :cl-smtp) (asdf:defsystem :cl-smtp :version "20060404.1" :depends-on - #-allegro (:cl-base64) - #+allegro () - :components - (#+sbcl(:file "sbcl") - #+allegro(:file "acl") - #+cmu(:file "cmucl") - #+clisp(:file "clisp") - #+openmcl(:file "openmcl") - #+lispworks(:file "lispworks") - (:file "cl-smtp" :depends-on #+sbcl("sbcl") - #+allegro("acl") - #+cmu("cmucl") - #+clisp("clisp") - #+openmcl("openmcl") - #+lispworks("lispworks")) - (:file "attachments" :depends-on #+sbcl("sbcl") - #+allegro("acl") - #+cmu("cmucl") - #+clisp("clisp") - #+openmcl("openmcl") - #+lispworks("lispworks")))) + (:usocket #-allegro :cl-base64) + :components + ((:file "cl-smtp" + :depends-on ("attachments")) + (:file "attachments"))) Index: cl-smtp.lisp =================================================================== RCS file: /project/cl-smtp/cvsroot/cl-smtp/cl-smtp.lisp,v retrieving revision 1.5 diff -u -r1.5 cl-smtp.lisp --- cl-smtp.lisp 4 Apr 2006 13:04:40 -0000 1.5 +++ cl-smtp.lisp 20 May 2007 20:31:07 -0000 @@ -83,7 +83,7 @@ (defun send-smtp (host from to subject message &key (port 25) cc bcc reply-to extra-headers display-name authentication attachments buffer-size) - (let ((sock (socket-stream (make-smtp-socket host port))) + (let ((sock (usocket:socket-stream (usocket:socket-connect host port))) (boundary (make-random-boundary))) (unwind-protect (progn @@ -153,7 +153,7 @@ (error "wrong response from smtp server: ~A" msgstr))) (cond (authentication - (write-to-smtp sock (format nil "EHLO ~A" (get-host-name))) + (write-to-smtp sock (format nil "EHLO ~A" (usocket::get-host-name))) (multiple-value-bind (code msgstr) (read-from-smtp sock) (when (/= code 250) @@ -189,7 +189,7 @@ (error "authentication ~A is not supported in cl-smtp" (car authentication))))) (t - (write-to-smtp sock (format nil "HELO ~A" (get-host-name))) + (write-to-smtp sock (format nil "HELO ~A" (usocket::get-host-name))) (multiple-value-bind (code msgstr) (read-from-smtp sock) (when (/= code 250) Hope this works as well for you as it does for me! bye, Erik.