1 URLs and HTTP
2 URI Codec: Encoding and Decoding URIs
3 FTP: Client Downloading
4 Send URL: Opening a Web Browser
5 SMTP: Sending E-Mail
6 sendmail: Sending E-Mail
7 Headers: Parsing and Constructing
8 IMAP: Reading Mail
9 POP3: Reading Mail
10 MIME: Decoding Internet Data
11 Base 64: Encoding and Decoding
12 Quoted-Printable: Encoding and Decoding
13 DNS: Domain Name Service Queries
14 NNTP: Newsgroup Protocol
15 TCP: Unit and Signature
16 TCP Redirect: tcp^ via Channels
17 SSL Unit: tcp^ via SSL
18 CGI Scripts
19 Cookie: HTTP Client Storage
Bibliography
Index
On this page:
5.1 SMTP Functions
smtp-send-message
smtp-sending-end-of-message
5.2 SMTP Unit
smtp@
5.3 SMTP Signature
smtp^
Version: 4.0.2

 

5 SMTP: Sending E-Mail

 (require net/smtp)

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.

5.1 SMTP Functions

(smtp-send-message

 

server-address

 

 

 

 

 

 

from

 

 

 

 

 

 

to

 

 

 

 

 

 

header

 

 

 

 

 

 

message

 

 

 

 

 

 [

#: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? false/c) = #f

  pw : (or/c string? false/c) = #f

  

connect

 

:

 

((string? (integer-in 0 65535))

 . ->* . (input-port? output-port?))

 

=

 

tcp-connect

  

encode

 

:

 

(or/c false/c

      ((input-port? output-port?

        #:mode (one-of/c 'connect)

        #:encrypt (one-of/c 'tls)

        #:close-original? (one-of/c #t))

       . ->* . (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 #:auth-user and #:auth-passwd keyword argument supply a username and password for authenticated SMTP (using the AUTH PLAIN protocol).

The optional #:tcp-connect keyword 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 #: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).

5.2 SMTP Unit

 (require net/smtp-unit)

smtp@ : unit?

Imports nothing, exports smtp^.

5.3 SMTP Signature

 (require net/smtp-sig)

smtp^ : signature

Includes everything exported by the net/smtp module.