[racket] (smtp-send-message ...) with #:tls-encode
I *am* trying to connect to a exchange server, I just used gmail as a
acceptable public target.
I'll try again, though I suspect a proxy server it the problem. I
can't tell because the server response is truncated. :(
Thanks again,
Stephen
On Wednesday, March 9, 2011, Greg Hendershott <greghendershott at gmail.com> wrote:
> 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
> <spdegabrielle at 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 <greghendershott at 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
>>> <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
>>> >
>
--
--
Stephen De Gabrielle
stephen.degabrielle at acm.org
Telephone +44 (0)20 85670911
Mobile +44 (0)79 85189045
http://www.degabrielle.name/stephen