smtpfront(8) 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:
  • Validates senders and recipients according to ``mailrules'' 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 the body.
  • 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.


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.