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 protocol-independant fashion.
The following features are common to all SMTP front-ends:
o Validates senders and recipients according to ‘‘mailrules’’
o 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.
o Handles RFC 2554 SMTP authentication. After authentication all
recipients not rejected by mail rules are allowed, and back-end
validation is omitted.
o Automatically handles either bare NL or RFC 821/2821 compliant CR/NL
o Rejects messages that exceed $DATABYTES bytes in the body.
o 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).
o Counts the number of "Received:" and "Delivered-To:" headers, and
rejects the message if more than $MAXHOPS of either are seen
(defaults to 100).
o All error responses are logged.
o Handles (ignores) RFC 1869 extended parameters on the ‘‘RCPT TO:’’
and ‘‘MAIL FROM:’’ commands.
o Initial greeting message is configureable by $SMTPGREETING.
o Rejects bounce messages (messages with an empty envelope sender) that
attempt to deliver to multiple recipients.
o 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
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.