Generally, you will compose mail using a mailer interface like
mail or mailx, or more
sophisticated ones like mutt, tkrat,
or pine. These programs are called
mail user agents, or MUAs. If you send a mail
message, the interface program will in most cases hand it to another
program for delivery. This is called the mail transport
agent, or MTA. On most systems the same MTA is used for both
local and remote delivery and is usually invoked as
/usr/sbin/sendmail, or on non-FSSTND compliant systems as
/usr/lib/sendmail. On UUCP systems it is not uncommon to
see mail delivery handled by two separate programs: rmail
for remote mail delivery and lmail for local mail delivery.
Local delivery of mail is, of course, more than just appending the
incoming message to the recipient's mailbox. Usually, the local MTA understands aliasing (setting up local recipient addresses
pointing to other addresses) and forwarding (redirecting a user's mail
to some other destination). Also, messages that cannot be delivered
must usually be bounced, that is, returned to the
sender along with some error message.
For remote delivery, the transport software used depends on the nature
of the link. Mail delivered over a network using TCP/IP commonly uses
Simple Mail Transfer Protocol (SMTP), which is
described in RFC-821. SMTP was designed to deliver
mail directly to a
recipient's machine, negotiating the message transfer with the remote
side's SMTP daemon. Today it is common practice for organizations to
establish special hosts that accept all mail for recipients in the
organization and for that host to manage appropriate delivery to the
intended recipient.
Mail is usually not delivered directly in UUCP networks, but
rather is forwarded to the destination host by a number of intermediate
systems. To send a message over a UUCP link, the sending MTA usually executes rmail on the forwarding system using
uux, and feeds it the message on standard input.
Since uux is invoked for each message separately, it may
produce a considerable workload on a major mail hub, as well as clutter the
UUCP spool queues with hundreds of small files taking up a disproportionate
amount of disk space.[1] Some MTAs
therefore allow you to collect several messages for a remote system in a
single batch file. The batch file contains the SMTP commands that the local
host would normally issue if a direct SMTP connection were used. This is
called BSMTP, or batched SMTP. The batch is then fed
to the rsmtp or bsmtp program on the
remote system, which processes the input almost as if a normal SMTP
connection has occurred.