smtpfront - SMTP Front Ends
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
The following features are common to all SMTP front-ends:
- Validates senders and recipients according to ``mailrules''
- 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 the
- 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
- 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
- Uses the echo backend to simply echo back the sender and
recipient parameters, and the size of the data to the client.
- Uses the ``qmail validation features'' to validate
addresses, and the ``qmail backend'' to deliver messages.
- 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.