sendmail Command

Purpose

Routes mail for local or network delivery.

Syntax

sendmail-ba | -bd | -bD | -bh | -bH | -bi | -bm | -bp | -bs | -bv | -bt [-Ac File] [  -C File ] [-D Log File] [  -d Value ] ] [  -B Type ] [  -F FullName ] [  -f Name ] [-G] [  -h Number ] [  -i ] [ -Mx Value] [  -n ] [  -N Dsn ] [  -O Option=Value ] [  -o OptionValue ] ] [  -p Protocol ] [  -qTime] ] [-qGname] [  -qISubstr  ] [  -qRSubstr ] [  -qSSubstr ] [  -R Return ] [  -r addr ] [  -t ] [  -V Envid ] ] [  -v ] [  -X LogFile ] Address

Note: The Address parameter is optional with the -bd, -bi, -bp, -bt, and -qTime ] flags.

Description

Note:
  • Starting with AIX® 7 with 7200-04, the sendmail command uses Sendmail version 8.15.2. The sendmail command can be run by a new smmsp user and smmsp group instead of the root user for enhanced security.
  • In Sendmail v8.7, and later, name resolution ordering is Domain Name System (DNS), Network Information Services (NIS), Network Interface Services (NIS), then local. If you want to override this default order, specify an order in the /etc/netsvc.conf file or specify the NSORDER environment variable.

The sendmail command receives formatted text messages and routes the messages to one or more users. Used on a network, the sendmail command translates the format of a message's header information to match the requirements of the destination system. The program determines the network of the destination system by using the syntax and content of the addresses.

The sendmail command can deliver messages to:

  • Users on the local system
  • Users connected to the local system by using the TCP/IP protocol
  • Users connected to the local system by using the Basic Networking Utilities (BNU) command protocol

Use the sendmail command only to deliver pre-formatted messages. The sendmail command is not intended as a user interface routine; other commands provide user-friendly interfaces.

The sendmail command reads standard input for message text. The sendmail command sends a copy of the message to all addresses listed whenever it reads an end of the message character. The end of the message character is either an end-of-file (Ctrl-D) control sequence or a single period on a line.

Details about the sendmail command are explained in the following subsections:

sendmail Mail Filter API (Milter)

sendmail mail filter flags

sendmail mail filter timeouts

Using the sendmail configuration files

Restarting and refreshing the sendmail processes

Migrating to AIX 7 with 7200-04

Defining Aliases

sendmail Mail Filter API (Milter)

The sendmail Mail Filter API provides access to mail messages as they are being processed so that third-party programs can filter meta-information and content. Filters that are developed using the sendmail Mail Filter API use threads, so it might be necessary to alter the per-process limits in your filter. For example, if your filter is frequently used, use the setrlimit subroutine to increase the number of open file descriptors.

Specifying filters in sendmail configs

Use the key letter X (for external) to specify filters. The following are three example filters:
Xfilter1, S=local:/var/run/f1.sock, F=R
Xfilter2, S=inet6:999@localhost, F=T, T=C:10m;S:1s;R:1s;E:5m
Xfilter3, S=inet:3333@localhost
You can specify filters in your .mc file. The following filter attaches to a UNIX-domain socket in the /var/run directory:
INPUT_MAIL_FILTER(`filter1', `S=local:/var/run/f1.sock, F=R')
The following filter uses an IPv6 socket on port 999 of localhost:
INPUT_MAIL_FILTER(`filter2', `S=inet6:999@localhost, F=T, T=C:10m;S:1s;R:1s;E:5m')
The following filter uses an IPv4 socket on port 3333 of localhost:
INPUT_MAIL_FILTER(`filter3', `S=inet:3333@localhost')

sendmail mail filter flags

R
Reject connection if filter is not available.
T
Temporarily fail connection if filter is not available.

If neither F=R or F=T is specified, the sendmail command passes the message as if the filter is not present. The separator is a comma (,).

sendmail mail filter timeouts

You can override the default sendmail timeouts with T=x. There are four fields in the T= statement:
C
Timeout for connecting to a filter (if 0, use system timeout).
S
Timeout for sending information from the MTA to a filter.
R
Timeout for reading reply from the filter.
E
Overall timeout between sending end-of-message to filter and waiting for the final acknowledgment.
The separator between each entry is a semicolon (;).
The default values are:
  • T=C:0m;S:10s;R:10s;E:5m
The InputMailFilters option determines which filters are invoked and how the filters are sequenced:
InputMailFilters=filter1, filter2, filter3
This is set automatically according to the order of the INPUT_MAIL_FILTER commands in your .mc file. You can also reset the value by setting confINPUT_MAIL_FILTERS in your .mc file. This option calls the three filters in the order the filters were specified.

You can define a filter without adding it to the input filter list by using MAIL_FILTER() instead of INPUT_MAIL_FILTER() in your .mc file.

Note: If InputMailFilters is not defined, no filters will be used.

Using the sendmail configuration files

In AIX 7 with 7200-03 and earlier, the sendmail command uses a single configuration file, /etc/mail/sendmail.cf, to set operational parameters and to determine how the command parses addresses. Starting with AIX 7 with 7200-04, the sendmail command supports the Mail Submission Program mode (MSP_mode) by using the /etc/mail/submit.cf configuration file. The sendmail command in the MSP mode does not require root privileges. Therefore, the sendmail command in MSP mode is more secure as compared to the previous version. The sendmail command uses the sendmail.cf configuration file when the sendmail command runs as mail server daemon in the Mail Transmission Agent (MTA) mode. For information about the security consideration of the sendmail command, see http://www.sendmail.org/~ca/email/doc8.12/SECURITY.

The sendmail configuration files are described as follows:
/etc/mail/sendmail.cf
This configuration file is used when the sendmail command runs as mail server daemon in the MTA mode. By default, the sendmail.cf file uses the mail queue in the /var/spool/mqueue directory. On system boot, the sendmail MTA daemon is started in the /etc/rc.tcpip directory by default. To manually start the sendmail MTA daemon, enter the following command:
# startsrc -s sendmail -a " -bd -q30m"
/etc/mail/submit.cf
This configuration file is used by the sendmail command to operate in the MSP mode. By default, the submit.cf file uses the system mail queue in the /var/spool/clientmqueue directory. The sendmail command operates in the MSP mode under the following scenarios:
  • When the sendmail command is run at command line or is called by another mail facility (such as the mail command) to send email.
  • When the sendmail command is invoked as client-queue runner. The sendmail client-queue runner identifies the undelivered messages in the /var/spool/clientmqueue directory and submits the messages to the sendmail MTA daemon for delivery. Enter the following command to run the sendmail command as a queue runner in MSP mode manually:
    # /usr/lib/sendmail -Ac -q 30m 

You can also set the sendmail MTA daemon to start automatically whenever the system boots by editing the /etc/rc.tcpip file. For instructions about editing the /etc/rc.tcpip file, see Starting the sendmail daemon during system boot.

Restarting and refreshing the sendmail processes

The configuration files that are used by the sendmail command are text files that you can edit by using any text editor. After modifying any of these configuration files, you must restart or refresh the MTA daemon and the MSP for the changes to take effect.

The current process ID of the sendmail command is stored in the /etc/mail/sendmail.pid file. Run the following kill command to allow the sendmail command reread the newly edited configuration files:

#kill -15 `head -1 /etc/mail/sendmail.pid`

If the srcmstr command is running, you can run the refresh command to build the configuration database, the aliases database, and the NLS database again:

#refresh -s sendmail

If you started the sendmail MSP manually, and if the sendmail process is not controlled by the srcmstr command, you can stop the sendmail process by using the following kill command:

# kill <pid of the sendmail: Queue runner >

Migrating to AIX 7 with 7200-04

If you are running AIX 7 with 7200-03, or earlier, and if you configure the sendmail command, when you migrate to AIX 7 with 7200-04, the sendmail command runs as an MTA daemon. Back up the sendmail.cf configuration file before starting the migration operation by running the following command:

# cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.old

After the migration operation is complete, the previous sendmail.cf configuration file is transferred to the new sendmail.cf configuration file.

Complete the following steps after you migrate your AIX operating system to AIX version 7.2.4, or later:
  1. If you cannot find the sendmail.cf file after migration, restore the backup file by running the following command:
    # cp /etc/mail/sendmail.cf.old /etc/mail/sendmail.cf
  2. Restart and refresh the sendmail processes by running the following command:
    # startsrc -s sendmail -a " -bd -q30m"
    # refresh -s sendmail

    These commands run the sendmail command as MTA.

The sendmail command rereads the databases and continues the operation with the sendmail.cf configuration file.

Defining Aliases

Thesendmail command allows you to define aliases to use when the sendmail command handles the local mail. Aliases are alternative names that you can use in place of elaborate network addresses. You can also use aliases to build distribution lists.

Define aliases in the /etc/mail/aliases file. This file is a text file you can edit. The sendmail command uses a database version of this file. Before any changes made to the /etc/mail/aliases file become effective, you must build a new alias database by running the sendmail-bi command or the newaliases command.

Berkeley DB support is available on AIX for Sendmail 8.11.0. Sendmail will continue to read the aliases in the DBM format until the aliases database gets rebuilt. Once rebuilt, Sendmail will read the aliases in the Berkeley DB format and store them in the /etc/mail/aliases.db file.

Note: When defining aliases in the /etc/mail/aliases file, use only lowercase characters for nested aliases. Uppercase characters on the right-hand side of an alias are converted to lowercase before being stored in the aliases database. In the following example, mail sent to testalias fails, because TEST is converted to test when the second line is stored.

TEST: user@machine
testalias: TEST

Every system must have a user or user alias designated as the postmaster alias. The default postmaster alias is a root file. You can assign this alias to a different user in the /etc/mail/aliases file. The postmaster alias allows other users outside your system to send mail to a known ID and to get information about mailing to users on your system. Also, users on your system can send problem notifications to the postmaster ID.

The sendmail command first opens a database in the format of hash-style aliases file. If it fails or if the NEWDB support was not compiled, the command opens a NDBM database. If that fails, the sendmail command reads the aliases source file into its internal symbol table.

Flags

Item Description
-Ac File Specifies the sendmail command to choose an alternative configuration file based on the operative mode. If you specify -bm, -bs, or -t flags, the sendmail command uses the submit.cf configuration file. If any other flags are specified, and for compatibility with earlier versions, the sendmail command uses the sendmail.cf configuration file. If you do not specify the file variable, by default, the sendmail command uses the submit.cf configuration file.
-B Type Sets the body type to type. Current legal values are 7BI or 8BITMIME.

Note: The -b flag is mutually exclusive.

-ba Starts the sendmail command in ARPANET mode. All input lines to the command must end with a carriage return and a line feed (CR-LF). The sendmail command generates messages with a CR-LF at the end and looks at the From: and Sender: fields to find the name of the sender.
-bd Starts the sendmail command as a daemon running in the background as a Simple Mail Transfer Protocol (SMTP) mail router.
-bD Starts the sendmail command as a daemon running in the foreground as a Simple Mail Transfer Protocol (SMTP) mail router.
-bh Prints the persistent host status database.
-bH Purges the persistent host status database.
-bi Builds the alias database from information defined in the /etc/mail/aliases file. Running the sendmail command with this flag is the same as running the /usr/sbin/newaliases command.
-bm Delivers mail in the usual way. (This is the default.)
-bp Prints a listing of the mail queue. Running the sendmail command with this flag is the same as running the /usr/sbin/mailq command.
-bs Uses the simple mail transfer protocol (SMTP) as described in RFC821 to collect mail from standard input. This flag also includes all of the operations of the -ba flag that are compatible with SMTP.
-bt Starts the sendmail command in address test mode. This mode allows you to enter interactive addresses and watch as the sendmail command displays the steps it takes to parse the address. At the test-mode prompt, enter a rule set or multiple rule sets separated by commas and an address. Use this mode for debugging the address parsing rules in a new configuration file.
-bv Starts the sendmail command with a request to verify the user IDs provided in the Address parameter field of the command. The sendmail command responds with a message telling which IDs can be resolved to a mailer command. It does not try to collect or deliver a message. Use this mode to validate the format of user IDs, aliases, or mailing lists.
-C File Starts the sendmail command using an alternate configuration file specified by the File variable. Use this flag together with -bt to test a new configuration file before installing it as the running configuration file.
-D Log File Sends the debugging output to the specified log file. The -D option must be before the -d option.
-d Value Sets the debugging value to the value specified by the Value variable. The only valid value is 21.n, where n is any nonzero integer. This produces information regarding address parsing and is typically used with the -bt flag. Higher values of n produce more verbose information. Root permissions are required for this flag.
-F FullName Sets the full name of the sender to the string provided in the FullName variable.
-f Name Sets the name of the from person ( the envelope sender of the mail). This address may also be used in the From: header if that header is missing during initial submission. The envelope sender address is used as the recipient for delivery status notifications and may also appear in a Return-path: header. This flag should only be used by trusted users (normally root, daemon, and uucp) or if the person you are trying to become is the same as the person you are. Otherwise, an X-Authentication-Warning header is added to the message.
-G Relay (gateway) submission of a message. For example, when the rmail command calls the sendmail command.
-h Number Sets the hop count to the value specified by the Number variable. The hop count is the number of times that the message has been processed by an SMTP router (not just the local copy of the sendmail command). The mail router increments the hop count every time the message is processed. When it reaches a limit, the message is returned with an error message in order to prevent infinite loops in the mail system.
-i Ignores dots alone on lines by themselves in incoming messages. This should be set if you are reading data from a file.
-L Sets the identifier used in syslog messages to the supplied tag.
-Mx Value Sets marco x to the specified value.
-N Dsn Sets delivery status notification conditions to DSN. The delivery status notification conditions can be: never for no notifications or for a comma separated list of the values, failure for notification if delivery failed, delay for notification if delivery is delayed, and success for notification when the message is successfully delivered.
-n Prevents the sendmail command from interpreting aliases.
-O Option=Value Sets Option to the specified Value. Use for long-form option names.
-o Option [ Value ] Sets the Option variable. If the option is a valued option, you must also specify a value for the Value variable.

Note: For valid values, see Options for the sendmail Command in the sendmail.cf file in Performance Tools Guide and Reference.

-p Protocol Sets the sending protocol. It is recommended that you set this. You can set Protocol in the form Protocol:Host to set both the sending protocol and the sending host. For example, -pUUCP:uunet sets the sending protocol to UUCP and the sending host to uunet. Some existing programs use -oM flag to set the r and s macros, which is equivalent to using the -p flag.
-qISubstr Limits process jobs to those containing Substr as a substring of the queue ID.
-qGname Processes jobs in a queue group called by name only.
-qRSubstr Limits process jobs to those containing Substr as a substring of one of the recipients.
-qSSubstr Limits process jobs to those containing Substr as a substring of the sender.
-qTime ] Processes saved messages in the queue at the intervals specified by the Time variable. If the Time variable is not specified, this flag processes the queue at once.
-R Return Sets the amount of the message to be returned if the message bounces. The Return parameter can be full to return the entire message or hdrs to return only the headers.
-r addr An obsolete form of -f.
-t Sends the message to the recipients specified in the To:, Cc:, and Bcc: fields of the message header, as well as to any users specified on the command line.
-V Envid Sets the original envelope ID. This is propagated across SMTP to servers that support DSNs and is returned in DSN-compliant error messages.
-v Starts the sendmail command in verbose mode. The sendmail command displays messages regarding the status of transmission and the expansion of aliases.
-X LogFile Logs all traffic in and out of sendmail in LogFile for debugging mailer problems. Use this flag sparingly, since it produces a lot of data very quickly.

You can also set or remove the sendmail configuration processing options. The person responsible for the mail system uses these options. To set these options, use the -o flag on the command line or the O control line in the configuration (/etc/mail/sendmail.cf) file.

Exit Status

The sendmail command returns exit status values. These exit values are defined in the /usr/include/sysexits.h file. The following table summarizes the meanings of these return values:

Item Description
EX_CANTCREAT The sendmail command cannot create a file that the user specified.
EX_CONFIG An error was found in the format of the configuration file.
EX_DATAERR The input data was incorrect in some way.
EX_IOERR An error occurred during I/O.
EX_NOHOST The sendmail command could not recognize the specified host name.
EX_NOINPUT An input file (not a system file) did not exist or was not readable.
EX_NOPERM The user does not have permission to perform the requested operation.
EX_NOUSER The sendmail command could not recognize a specified user ID.
EX_OK The sendmail command successfully completed.
EX_OSERR A temporary operating system error occurred. An example of such an error is a failure to create a new process.
EX_OSFILE A system file error occurred. For example, a system file (such as /etc/passwd) does not exist, cannot be opened, or has another type of error preventing it from being used.
EX_PROTOCOL The remote system returned something that was incorrect during a protocol exchange.
EX_SOFTWARE An internal software error occurred (including bad arguments).
EX_TEMPFAIL The sendmail command could not create a connection to a remote system. Try the request again later.
EX_UNAVAILABLE A service or resource that the sendmail command needed was not available.
EX_USAGE The command syntax was not correct.

Security

Attention RBAC users and Trusted AIX users: This command can perform privileged operations. Only privileged users can run privileged operations. For more information about authorizations and privileges, see Privileged Command Database in Security. For a list of privileges and the authorizations associated with this command, see the lssecattr command or the getcmdattr subcommand.

Auditing Events:

Event Information
SENDMAIL_Config Configuration event
SENDMAIL_ToFile File-creation event

Example

Run the following command to display the sendmail version:

echo \$Z | sendmail -d0

The system responds with a message similar to the following:

Version AIX5.2/8.11.6p2
 Compiled with: LDAPMAP MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7
             NAMED_BIND NDBM NETINET NETINET6 NETUNIX NEWDB NIS NISPLUS
                QUEUE SCANF SMTP USERDB XDEBUG

============ SYSTEM IDENTITY (after readcf) ============
      (short domain name) $w = dodgers
  (canonical domain name) $j = dodgers.usca.ibm.com
         (subdomain name) $m = usca.ibm.com
              (node name) $k = dodgers
========================================================

Recipient names must be specified
# oslevel -r
5200-02
#

Files

Item Description
/usr/sbin/sendmail Contains the sendmail command.
/usr/sbinmailq/ Contains the mail queue.
/usr/sbin/newaliases Contains the alias database.
/usr/sbin/mailstats Contains statistics found in the /usr/lib/sendmail.st file.
/etc/mail/aliases Contains the text version of the sendmail command aliases.
/etc/mail/aliases.db Contains Berkeley DB formatted database for aliases.
/etc/mail/aliases.dir Contains DBM formatted database for aliases.
/etc/mail/aliases.pag Contains DBM formatted database for aliases.
/etc/mail/sendmail.cf Contains the text version of the sendmail configuration file.
/etc/mail/submit.cf Contains the text version of the sendmail configuration file. If this file exists, this file is considered as the default configuration file.
/etc/sendmail.st Contains mail routing statistics information.
/usr/lib/smdemon.cleanu Maintains aging copies of the log file found in the /var/spool/mqueue directory.
/var/spool/mqueue Contains the temporary files and the log file associated with the messages in the mail queue.
/usr/bin/uux Contains the mailer command to deliver Basic Networking Utilities (BNU) mail.
/usr/bin/bellmail Contains the mailer command to deliver local mail.