#lang racket (require net/smtp net/head openssl) (provide send) ;; try http://www.checktls.com/TestSender (define (myconnect a-server a-port) (ssl-connect a-server ;hostname 465 ;port-no 'tls ;client-protocol )) (define (my-encode input-port output-port #:mode mode #:encrypt [protocol 'tls] #:close-original? [close-original? #t]) (ports->ssl-ports input-port output-port #:mode mode ;#:context context #:encrypt protocol #:close-original? close-original? ;#:shutdown-on-close? shutdown-on-close? ;#:error/ssl error ) ) (define (handler message) (format "Failed with reason::~A" message)) (define (my-send from to subject message server-address user password) (with-handlers ([exn:fail? handler]) (smtp-send-message server-address from to (standard-message-header from to '();cc '();bcc subject ;subject ) ;header message #:port-no 587 #:auth-user user #:auth-passwd password #:tcp-connect myconnect #:tls-encode my-encode ) ;port-no )) ;;; tests (define server-address "smtp.gmail.com") (define from "spdegabrielle@gmail.com") (define to '("stephen.degabrielle@acm.org")) (define subject "a test") (define user "spdegabrielle") (define password "xxxxx") (define message '("test" "message")) (my-send from to subject message server-address user password)