Electronic Mail: The Basics
An ultra-condensed explanation of e-mail:
a sender (person)
uses a mail agent
(program) to compose a
message, which
contains the e-mail
addresses of several
recipients.
The agent passes the message to a
transport service
for delivery to the mailboxes of the
recipients, who each use their own agents to
read the e-mail.
The rest of this document expands this
explanation in two successively finer levels
of detail. The Terms
section gives a bit more explanation of each
role in the ultra-condensed explanation, and
the remaining sections explain each step in
more detail.
To understand electronic mail (e-mail),
you need to learn a mental model that
involves seven roles, that correspond
roughly to similar roles for "regular"
letters:
- the sender:
a person who composes and sends e-mail
messages,
- the mail agent,
a program the sender uses to do so; for
regular mail, this might be a pen or
typewriter
- the message,
a computer representation of what the
sender wanted to say. For regular mail
this would be the paper and its envelope.
- the mail
transport subsystem: a system
(that is, a complex collection of
programs) that delivers the message; for
regular mail, this would be the combined
Postal Services, airlines, trucking
companies, and so on, involved in
delivery.
- the
recipient, a person who receives
the mail
- the recipient's mail agent, which
might be a different program from the
sender's; for regular mail, this might be
a magnifying glass used to read the
sender's tiny handwriting
- the e-mail
address, a text string used to
identify senders and recipients; for
regular mail, this would be the text for
the usual street address, city, country,
and so on.
There are a few more roles that show up
in the details:
- a server
is a program constantly running on some
internet site, waiting for other sites to
send it requests to perform some service
or other (like delivering mail).
- a protocol
is a particular collection of types of
requests and responses understood by a
particular kind of server. Thus Web
servers follow HTTP, the Hyper Text
Transfer Protocol.
First the sender composes a message with
the mail agent, then asks the mail agent to
invoke the mail transport system to deliver
the message.
Composing an e-mail message is much like
composing any other kind of document; the
mail agent usually behaves similarly to many
other editors. The main complication is that
messages have two parts:
- The header, which more-or-less
corresponds to the envelope of postal
mail. It consists of a sequence of tagged
header lines; tags are defined by
an
Internet standard, and include things
like
To, Subject,
CC, and Date.
Your mail agent will ask you to supply
some of these (such as To),
will fill in some by itself (e.g. From and
Date), and will allow you to add others
(like CC).
- The body: the main part of your
message, which corresponds more-or-less to
the paper you put inside the envelope for
postal mail. You can think of this as a
simple text message with zero or more
attachments; in fact the attachments are
encoded as text via a protocol called
MIME (Multipurpose Internet Mail
Extensions)
While in the midst of composing, you may
decide to stop and do something else. Some
mail agents provide a 'draft' folder into
which you can place partly-composed mail,
which you can resume later.
At some point you tell your mail agent to
send the message you have just composed. The
method for doing this varies with the mail
agent. Agents with a graphical user
interface (GUI), like NetScape Messenger,
have a Send button or menu
item. Text-based agents, like GNU Emacs
RMAIL, have some special keyboard
combination, like a pair of control-C
characters (ASCII 003, typed twice).
At this point the mail agent may perform
certain checks before sending your message
-- the primary check being: did you supply
sensible values for at least one recipient
header field (primarily To and CC)? Once it
is convinced it should actually send the
message, it invokes the mail transport
subsystem to deliver it.
Mail transport usually involves sending
information over the Internet. The Internet
is not always immediately available when you
want to send mail; many personal computers
use dialup lines to connect to the Internet,
so are sometimes "off-line" while you are
composing mail. Thus there may be a second
queue somewhere, separate from the "draft"
folder, where the mail agent or the mail
transport system keeps mail that you've
committed to send, but which hasn't actually
been sent yet. If the mail agent keeps the
queue, it might choose to make it visible
through an "unsent messages" folder. If the
mail transport system keeps the queue, it
might be invisible to you unless your system
provides some extra way to get at this
information. On my UNIX system at work, for
example, the mail transport subsystem keeps
the queue, and I have no idea where it is.
Ideally, it would be nice to ignore what
happens in between when you send a message
and when the recipient reads it.
Unfortunately, you can be faced with the
consequences of failures of various kinds at
the transport level, and thus need a basic
understanding to have any hope of figuring
out what is happening.
To tell the mail transport system where
to send your message, you supply one or more
addresses for recipients. An address is a
text string of the form mailbox@site.
The second part is a string identifying a
particular site on the Internet; the first
part is a string identifying a particular
mailbox at that site.
Every Internet site has an Internet
Protocol (IP) address, specified as four
decimal numbers (each in the range 0-255)
separated by dots. The transport service
sends the site name string to a
Domain Name Server (DNS), which translates
the name into an IP address. The transport
service then starts up an Internet
connection to the given IP address, and asks
the destination site to deliver mail to the
given mailbox.
For this to work, the destination site
has to be running a program called a mail
server that
is listening for requests to deliver mail.
At this point the mail server can do one of
several things
- Accept the message and store it in the
expected mailbox.
- Forward the message somewhere else,
usually to a place specified by the owner
of the mailbox, but possibly to a
mailing list.
- Reject the message as undeliverable,
either because the mailbox doesn't exist,
or because the mailbox is full, or because
the server is facing some temporary
problem.
There is usually no good way to guess at
someone's e-mail address, unless they tell
you -- although there are some
guidelines for finding addresses. Some
sites let you look up domain names in their
DNS with a
Web form.
There are basically two kinds of mail
servers, distinguished by the
protocol
they expect you to use to communicate with
them.
- Basic Simple Mail Transfer Protocol (SMTP)
delivery. The server translates the
mailbox name into a local file name, and
appends the message to the file. For
example, on some UNIX system, mailbox XX
might be stored in file
/var/spool/XX.
Mail agents on the server's site know to
copy and truncate this file when receiving
incoming mail.
- Post Office Protocol (POP)
delivery. The server still stores messages
somewhere, in a place derived from the
mailbox name. However, it allows
mail-receiving connections from other
Internet sites. The mail agent on the
recipient's site knows to open an Internet
connection to the POP server, request
contents of particular messages, and
(optionally) remove messages from the
server's mailbox.
POP service is newer than SMTP service;
it has the large advantage that you can
access your e-mail from anywhere on the
Internet, without logging in to the server.
You can typically arrange that, when reading
messages from some site other than your main
one, the mail agent leaves all messages on
the server, so you can read them again later
from your home site.
When you start your mail agent, it
usually checks with the mail server to see
if any new mail has arrived. Most agents can
also perform this check periodically, or on
command. An agent downloads incoming mail,
and may also (if you so choose) filter out
some messages so you never see them.
When the server reports that there is new
mail, the agent typically copies all new
messages from the server into an "incoming
messages" or "in box" folder and removes
them from the server. The agent usually
keeps track of which messages you've read,
and which remain unread. It may give you
some way to move messages from your in box
to other folders.
Some agents provide ways to filter
incoming mail. Based on patterns in the
header or text body, the agent can file
messages in special folders, or delete them
entirely. On UNIX systems, filtering can
take place as the server receives messages
(via programs such as
procmail and mailagent).
Mailing lists and newsgroups are
mail-like mechanisms for communicating with
(potentially) large groups of other people.
For normal e-mail addresses, the
recipient's server translates the mailbox
into a specific file or directory, into
which it places the incoming message. For
mailing lists, the server instead finds an
associated file containing a list of e-mail
addresses, and forwards the message to each
address on the list.
Check out the very large list of
publicly-accessible mailing lists and
the
guide to social newsgroups and mailing lists.
To set up a mailing list that other people
can use, use a
Mailing List Service Provider or get
your site to install
mailing list administration software.
This might best be explained by showing
the contents of a form letter I use to reply
to people who complain about receiving my
periodic news postings:
You appear to be complaining about my
"finding e-mail addresses" FAQ. This is
not an e-mail message that I am sending to
you; it is a USENET news posting. I am
guessing that you use a news reader like
NetScape Communicator 4.0, which confuses
people by blurring the distinction between
news and mail. Unlike e-mail messages,
which are directed to specific lists of
people, news is "broadcast" by a very
different mechanism, and there is no way
for me to single you out to stop receiving
it.
If you want to stop receiving this news
group entirely, you need to use your news
reader's "unsubscribe" feature; how to do
this depends on what news reader software
you are using.
However, if you don't want to
unsubscribe completely, you can almost
certainly avoid any costs or annoyances
associated with viewing my FAQ. When you
open a news folder like
news.announce.newusers, your reader just
downloads short news headers from your
Internet Service Provider, until you ask
to see the actual message (usually by
clicking on its header, or by using
"next"). Most news readers have some kind
of filtering mechanism that let you say
"don't show me messages with the following
subject" (sometimes labeled "ignore
thread" or "ignore subject"). The filters
use information in the headers, and so
don't need to download the very large
message body before they decide not to
show it to you.
|