[racket] (smtp-send-message ...) with #:tls-encode

From: Greg Hendershott (greghendershott at gmail.com)
Date: Mon Mar 7 16:20:30 EST 2011

> 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
<spdegabrielle at gmail.com> wrote:
> Hi,
>
> Does anyone have an example of using #:tls-encode (net/smtp)?
>
> Cheers,
>
> Stephen
>
> --
> Stephen De Gabrielle
> stephen.degabrielle at 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



Posted on the users mailing list.