SMTP Front Ends
Overview
The code for SMTP is divided internally into two sections:
front-end and back-end code. The front-end code handles the low-level
details of the protocol. The back-end code handles the validation and
delivery details in a protocol-independant fashion.
Features
The following features are common to all SMTP front-ends:
- Validates senders and recipients according to mail rules processing.
- If $RELAYCLIENT is set, all recipient addresses not
rejected by mail rules are allowed, and its contents are appended to
each recipient address. Back-end validation is omitted.
- Handles RFC 2554 SMTP authentication. After authentication all
recipients not rejected by mail rules are allowed, and back-end
validation is omitted.
- Automatically handles either bare NL or RFC 821/2821 compliant
CR/NL end-of-line conventions.
- Rejects messages that exceed $DATABYTES bytes in length.
- Times out connections after $TIMEOUT seconds of inactivity
(defaults to 1200 seconds or 20 minutes), or $SESSION_TIMEOUT
seconds after the connection was established (defaults to 86400 seconds
or 24 hours).
- Counts the number of "Received:" and
"Delivered-To:" headers, and rejects the message if more than
$MAXHOPS of either are seen (defaults to 100).
- All error responses are logged.
- Handles (ignores) RFC 1869 extended parameters on the RCPT
TO: and MAIL FROM: commands.
- Initial greeting message is configureable by
$SMTPGREETING.
- Rejects bounce messages (messages with an empty envelope sender)
that attempt to deliver to multiple recipients.
- Optionally adds a fixup "Received:" header for hosts that
have different incoming and outgoing hostnames or IPs. Set
$FIXUP_RECEIVED_HOST and $FIXUP_RECEIVED_IP if you
want this header added.
- Optional user-specified headers may be added by setting
$HEADER_ADD.
- If $CVM_LOOKUP is set, recipients are sent to the named CVM
to see if they are valid. If CVM_LOOKUP_SECRET or
$LOOKUP_SECRET are set and not empty, the value is sent as a
single credential to the CVM.
- Supports RFC 1870 SMTP Service Extension for Message Size
Declaration.
- If $MAXRCPTS is set, the number of recipients allowed per
message is limited to that number.
- Support for pattern matching in the
message data.
- If $MAXNOTIMPL is set, clients are disconnected if they
send more than the specified number of commands that result in a
"500 Not implemented." error.
Back Ends
- smtpfront-echo
Uses the echo backend to simply
echo back the sender and recipient parameters, and the size of the
data to the client.
- smtpfront-qmail
Uses the qmail validation features to validate
addresses, and the qmail backend to
deliver messages.
- smtpfront-reject
If $SMTPREJECT is set,
all SMTP commands are rejected with this message. If the message
starts with a "-", a permanent error number is used and the
leading "-" is stripped. If $SMTPREJECT is not set,
it execs its command line.