James Feeney:
> For the milter to "reject a command" implies that the milter is
> rejecting a command from the MTA for some reason, which makes no
> sense, since such behavior would appear to contradict the milter
> protocol described in the milter protocol article.
Yet that is EXACTLY what happens.
Below is the list of the COMMANDs that the MTA can send to a Milter.
- Some MTA-to-Milter COMMANDS convey an SMTP protocol event such as SMFIC_HELO.
- Some MTA-to-Milter COMMANDS convey message content such as SMFIC_HEADER.
- Some MTA-to-Milter COMMANDS are concerned with the MTA-Milter protocol.
/*
* Commands from MTA to filter.
*/
#define SMFIC_ABORT 'A' /* Abort */
#define SMFIC_BODY 'B' /* Body chunk */
#define SMFIC_CONNECT 'C' /* Connection information */
#define SMFIC_MACRO 'D' /* Define macro */
#define SMFIC_BODYEOB 'E' /* final body chunk (End) */
#define SMFIC_HELO 'H' /* HELO/EHLO */
#define SMFIC_HEADER 'L' /* Header */
#define SMFIC_MAIL 'M' /* MAIL from */
#define SMFIC_EOH 'N' /* EOH */
#define SMFIC_OPTNEG 'O' /* Option negotiation */
#define SMFIC_QUIT 'Q' /* QUIT */
#define SMFIC_RCPT 'R' /* RCPT to */
#define SMFIC_DATA 'T' /* DATA */
#define SMFIC_UNKNOWN 'U' /* Any unknown command */
/* Introduced with Sendmail 8.14. */
#define SMFIC_QUIT_NC 'K' /* Quit + new connection */
And below is the list of REPONSEs that the Milter can send to the MTA.
- Some Milter-to-MTA RESPONSEs specify a decision such as SMFIR_REJECT.
- Some Milter-to-MTA RESPONSEs specify a modification such as SMFIR_ADDHEADER.
- Some Milter-to-MTA RESPONSEs are concerned with the MTA-Milter protocol.
A decision is required, but modifications are optional.
/*
* Responses from filter to MTA.
*/
#define SMFIR_ADDRCPT '+' /* add recipient */
#define SMFIR_DELRCPT '-' /* remove recipient */
#define SMFIR_ACCEPT 'a' /* accept */
#define SMFIR_REPLBODY 'b' /* replace body (chunk) */
#define SMFIR_CONTINUE 'c' /* continue */
#define SMFIR_DISCARD 'd' /* discard */
#define SMFIR_CONN_FAIL 'f' /* cause a connection failure */
#define SMFIR_CHGHEADER 'm' /* change header */
#define SMFIR_PROGRESS 'p' /* progress */
#define SMFIR_REJECT 'r' /* reject */
#define SMFIR_TEMPFAIL 't' /* tempfail */
#define SMFIR_SHUTDOWN '4' /* 421: shutdown (internal to MTA) */
#define SMFIR_ADDHEADER 'h' /* add header */
#define SMFIR_INSHEADER 'i' /* insert header */
#define SMFIR_REPLYCODE 'y' /* reply code etc */
#define SMFIR_QUARANTINE 'q' /* quarantine */
/* Introduced with Sendmail 8.14. */
#define SMFIR_SKIP 's' /* skip further events of this type */
#define SMFIR_CHGFROM 'e' /* change sender (incl. ESMTP args) */
#define SMFIR_ADDRCPT_PAR '2' /* add recipient (incl. ESMTP args) */
#define SMFIR_SETSYMLIST 'l' /* set list of symbols (macros) */
In summary, the MTA sends a command to a Milter, and the Milter
responds to the MTA with a decision or with a modification.
I expect that more information is not going to help you. I wrote
this message primarily for other people who find this discussion
through a search engine.
Wietse