If you're wanting to connect to Exchange Server as e.g. hosted by Microsoft i.e. smtp.mail.microsoftonline.com, then it requires you to connect on port 587 (not encrypted), then issue STARTTLS to switch to encryption, then do AUTH LOGIN. (AUTH PLAIN won't work, ergo my mod of net/smtp's smtp-send-message.)
With such modified smtp-send-message, you want to pass it: 587 for port-no the default tcp-connect for #:tcp-connect ports->ssl-ports for #:tls-encode a valid user and pwd on that Exchange Server, for #:auth-user and #:auth-passwd. This means connect to port 587 using normal tcp-connect unencrypted, then use STARTTLS and ports->ssl-ports to switch over to TLS, then authorize using the name and password. This should work. On Tue, Mar 8, 2011 at 3:20 AM, Stephen De Gabrielle <spdegabrie...@gmail.com> wrote: > Thanks Greg, > > I'll test your patch against the Exchange server I'm wanting to connect to. > S. > > On Mon, Mar 7, 2011 at 9:20 PM, Greg Hendershott <greghendersh...@gmail.com> > wrote: >> >> > Does anyone have an example of using #:tls-encode (net/smtp)? >> >> No, in fact I'm seeing it fail today with an SMTP server that requires >> TLS on port 587. >> >> The reason seems to be that the server is expecting AUTH LOGIN whereas >> net/smtp only does AUTH PLAIN. >> >> I was able to get it to work (with this particular server) by making a >> local copy of smtp-send-message from net/smtp-unit.rkt and modifying >> lines 96-103: >> >> (when auth-user >> (log "auth\n") >> (fprintf w "AUTH PLAIN ~a" >> ;; Encoding adds CRLF >> (base64-encode >> (string->bytes/latin-1 >> (format "~a\0~a\0~a" auth-user auth-user auth-passwd)))) >> (check-reply r 235 w)) >> >> to be this instead: >> >> (when auth-user >> (if tls-encode >> (begin >> (log "auth login\n") >> (fprintf w "AUTH LOGIN\r\n") >> (check-reply r 334 w) >> (fprintf w "~a" ;encoding adds CRLF >> (base64-encode >> (string->bytes/latin-1 auth-user))) >> (check-reply r 334 w) >> (fprintf w "~a" ;encoding adds CRLF >> (base64-encode >> (string->bytes/latin-1 auth-passwd))) >> (check-reply r 235 w)) >> (begin >> (log "auth plain\n") >> (fprintf w "AUTH PLAIN ~a" ;encoding adds CRLF >> (base64-encode >> (string->bytes/latin-1 >> (format "~a\0~a\0~a" auth-user auth-user >> auth-passwd)))) >> (check-reply r 235 w)))) >> >> i.e. I tried to keep the AUTH PLAIN case while providing AUTH LOGIN on >> the assumption it will always be wanted when doing TLS. I don't deeply >> know the SMTP protocol. This is based on me observing one specific >> server and guessing what would work. That said, I hope this may help. >> >> >> On Fri, Feb 4, 2011 at 7:51 AM, Stephen De Gabrielle >> <spdegabrie...@gmail.com> wrote: >> > Hi, >> > >> > Does anyone have an example of using #:tls-encode (net/smtp)? >> > >> > Cheers, >> > >> > Stephen >> > >> > -- >> > Stephen De Gabrielle >> > stephen.degabrie...@acm.org >> > Telephone +44 (0)20 85670911 >> > Mobile +44 (0)79 85189045 >> > http://www.degabrielle.name/stephen >> > >> > _________________________________________________ >> > For list-related administrative tasks: >> > http://lists.racket-lang.org/listinfo/users > > > > -- > > -- > Stephen De Gabrielle > stephen.degabrie...@acm.org > Telephone +44 (0)20 85670911 > Mobile +44 (0)79 85189045 > http://www.degabrielle.name/stephen > > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users