The size of a message is considered to be the number of bytes in its
headers and body. That size can be declared or calculated. It is
predeclared with the SIZE= MAIL FROM: ESMTP parameter:
MAIL From:<liu@td.co.jp> SIZE=45621
Immediately after sendmail reads the size value
from the SIZE= parameter, it stores that value in the
${msg_size} macro. The value is stored before
checks for validity are made and so can contain nonnumeric
characters. If the message lacks a SIZE= parameter, the
${msg_size} macro will be undefined (NULL).
The message size is calculated again after the entire message has
been read (either from standard input, the queue, or via SMTP), and
the value in ${msg_size} is updated with that new
value. If an external MILTER program (Section 7.6)
is called, the ${msg_size} is updated again
because that program might have changed the size of the message.
The ${msg_size} macro can be useful in the
check_data rule set (check_data), which is called just after the SMTP DATA
command and can be used to check the size specified with SIZE=. It
can also be useful in the check_compat rule set
(Section 7.1.4), which is called just before delivery
and can be used to check the size of the received message.
${msg_size} is transient. If it is defined in the
configuration file or in the command line, that definition can be
ignored by sendmail. Note that a
$& prefix is necessary when you reference this
macro in rules (that is, use $&{msg_size}, not
${msg_size}).