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 send-smtp-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.
|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? false/c) = #f|
|pw : (or/c string? false/c) = #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 #:auth-user and #:auth-passwd keyword argument supply a username and password for authenticated SMTP (using the AUTH PLAIN protocol).
If the optional #:tls-encode keyword 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 #:tls-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 export port. All further SMTP communication uses the returned ports.
For encrypted communication, normally either ssl-connect should be supplied for #:tcp-connect, or ports->ssl-ports should be supplied for #:tls-encode – one 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).
|smtp@ : unit?|
Imports nothing, exports smtp^.
|smtp^ : signature|
Includes everything exported by the net/smtp module.