On this page:
6.1 SMTP Functions
6.2 SMTP Unit
6.3 SMTP Signature

6 SMTP: Sending E-Mail🔗

 (require net/smtp) package: net-lib
The net/smtp module provides tools for sending electronic mail messages using SMTP. The client must provide the address of an SMTP server; in contrast, the net/sendmail module uses a pre-configured sendmail on the local system.

The net/head library defines the format of a header string, which is used by smtp-send-message. The net/head module also provides utilities to verify the formatting of a mail address. The procedures of the net/smtp module assume that the given string arguments are well-formed.

6.1 SMTP Functions🔗


(smtp-send-message server-address    
  [#:port-no port-no/k    
  #:auth-user user    
  #:auth-passwd pw    
  #:tcp-connect connect    
  #:tls-encode encode    
  port-no])  void?
  server-address : string?
  from : string?
  to : (listof string?)
  header : string?
  message : (listof (or/c string? bytes?))
  port-no/k : (integer-in 0 65535) = 25
  user : (or/c string? #f) = #f
  pw : (or/c string? #f) = #f
  connect : 
(string? (integer-in 0 65535)
 . -> . (values input-port? output-port?))
   = tcp-connect
  encode : 
(or/c #f
      (input-port? output-port?
       #:mode 'connect
       #:encrypt 'tls
       #:close-original? #t
       . -> . (values input-port? output-port?)))
   = #f
  port-no : (integer-in 0 65535) = port-no/k
Connects to the server at server-address and port-no to send a message. The from argument specifies the mail address of the sender, and to is a list of recipient addresses (including “To:”, “CC”, and “BCC” recipients).

The header argument is the complete message header, which should already include “From:”, “To:”, and “CC:” fields consistent with the given sender and recipients. See also the net/head library for header-creating utilities.

The message argument is the body of the message, where each string or byte string in the list corresponds to a single line of message text. No string in message should contain a carriage return or linefeed character.

The optional port-no argument—which can be specified either with the #:port-no keyword or, for backward compatibility, as an extra argument after keywords—specifies the IP port to use in contacting the SMTP server.

The optional user and pw arguments supply a username and password for authenticated SMTP (using the AUTH PLAIN protocol).

The optional connect argument supplies a connection procedure to be used in place of tcp-connect. For example, use ssl-connect to connect to the server via SSL.

If the optional encode argument supplies a procedure instead of #f, then the ESMTP STARTTLS protocol is used to initiate SSL communication with the server. The procedure given as the encode argument should be like ports->ssl-ports; it will be called as

(encode r w #:mode 'connect #:encrypt 'tls #:close-original? #t)

and it should return two values: an input port and an output port. All further SMTP communication uses the returned ports.

For encrypted communication, normally either ssl-connect should be supplied for connect, or ports->ssl-ports should be supplied for encodeone or the other (depending on what the server expects), rather than both.


(smtp-sending-end-of-message)  (-> any)

(smtp-sending-end-of-message proc)  void?
  proc : (-> any)
A parameter that determines a send-done procedure to be called after smtp-send-message has completely sent the message. Before the send-done procedure is called, breaking the thread that is executing smtp-send-message cancels the send. After the send-done procedure is called, breaking may or may not cancel the send (and probably will not).

6.2 SMTP Unit🔗

smtp@ and smtp^ are deprecated. They exist for backward-compatibility and will likely be removed in the future. New code should use the net/smtp module.

 (require net/smtp-unit) package: compatibility-lib


smtp@ : unit?

Imports nothing, exports smtp^.

6.3 SMTP Signature🔗

 (require net/smtp-sig) package: compatibility-lib


smtp^ : signature

Includes everything exported by the net/smtp module.