COHERENT manpages
This page displays the COHERENT manpage for mail [Electronic mail system].
List of available manpages
Index
mail -- Overview Electronic mail system The COHERENT system includes a full-featured, UNIX-style mail system. This system consists of commands with which your system can send, receive, and forward mail; and configuration files, with which you can describe potential recipients of mail, either on your system or other systems. This article describes the design of the COHERENT mail system, and introduces the commands and files that compose it. The COHERENT mail system has three major components: the user agent (also called the mailer); the routing agents (the commands smail and rmail); and the delivery agents (the commands lmail and uux). This structure may seem overly complex (you may ask why all of this functionality could not be bundled into one program); however, experience has shown that it is best to organize each set of functions within its own program. One advantage this gives you is that you can replace one part of the mail system with another, superior program, without disturbing the operation of the system as a whole. For example, you may wish to replace the mailer mail with another mailer, such as elm. Because the mailer is its program, you can replace mail with elm without affecting the delivery or routing agents at all. You may never need to modify how the routing or delivery agents work, but studying the overall structure of the mail system will help you to decide intelligently on whether to replace a part of the mail system, and will also help you diagnose any problems that may crop up. The following describes each set of agents in turn. The User Agent The user agent (also called the mailer) presents to you the messages that have been delivered into your mailbox. It also collects messages from you and hands them to the routing agent for delivery. This is the program you invoke when you wish to read mail or send a mail message. COHERENT comes with one mailer, called mail. When you invoke it without any arguments, it reads the contents of file /usr/spool/mail/user (where user is your login identifier), breaks its contents into individual messages, and presents the messages to you one by one. (File /usr/spool/mail/user is also called your ``mailbox'', because that is where the mail system deposits your messages.) You can read a mail message; then, by giving commands to mail, you can reply to the message if you wish, then copy it into a file for archiving or throw it away. If you wish to send mail, type the command mail user where user identifies the user to whom you wish to send the message. user can either be a user on your system, or on a remote system; if the latter, you must also name the site on which user resides. The syntax for naming a remote sites is described in further detail below. When you invoke mail to send a mail message, mail presents the prompt Subject:, upon which you should type the subject of the message. When you have typed the subject, press <return>; you can then type the body of the message. Press <return> when you come to the end of a line; the cursor jumps to the beginning of the next line on your screen, and you can continue typing. When you have finished typing, type <ctrl-D> or a `.' at the beginning of a line; this signals mail that you have finished entering the message. mail then passes the message to the routing agents for delivery, as described in the next section. If, while you are typing the body of your message, you type the letter `?' at the beginning of a line, mail invokes an editor and copies your message into it. The editor it invokes is the set named by the environmental variable EDITOR. You can then use the editor to finish typing your message. When you have finished typing your message, exit from the editor; the message will then dispatched. When the mail dispatches your message, it checks your home directory for a file named .signature. This is your signature file: the mailer appends the contents of this file onto the end of your message, as your signature. A signature can be any mass of text that you wish; usually, it gives a user's name and e-mail address, and sometimes includes a joke, motto, or slogan as a form of self-expression. It's generally considered bad form to have a signature that exceeds five lines of text, or that uses vulgar, obscene, or abusive language. To mail a file to another user, use the shell's redirection operator `<'. For example, the command mail stephen < bug.report mails file bug.report to user stephen. The file will be prefixed with your address, and suffixed with your mail ``signature'', should you have one. For details on how to use the mailer and its commands, see the Lexicon entry for the command mail. Other mailers are also available for COHERENT; the most popular one is named elm. This mailer uses a visual interface to display the messages that are in your mailbox; you can use the arrow keys on your keyboard to move a cursor and select the message you want. Sources and binaries for elm are available on the MWC BBS and on other sites on the Internet. Routing Agents The routing agent, as term implies, figures out how to deliver a message to its destination, and dispatches it appropriately. The routing agent rmail (``route mail'') receives mail from another system. If the mail is intended for your local system, rmail passes the mail to the delivery agent lmail (described below) for delivery on your system. If, however, the mail is intended for forwarding to another system, rmail forwards it appropriately. rmail does most of its work in the background; you will seldom if ever will need to work with it directly. The routing agent smail (``send mail'') receives mail from you and dispatches to its target user, either on your system or on another system. smail actually is a large, complex program that handles mail correctly under a great variety of conditions. Under COHERENT, rmail actually is a link to smail. When you mail a message to user, smail performs the following steps to route the message: -> smail first looks up user in the file /usr/lib/mail/aliases. For details on aliases, see the Lexicon entry aliases. -> If smail finds user in one of these files, it substitutes the alias for user. If the alias is of the form sys!user or sys! ... !user or user@sys[.domain] smail treats it as a remote destination, and invokes command uux to spool the message to sys. When uux has delivered the message, it becomes the responsibility of command uuxqt on sys to pass the message to user. -> If smail finds no match in /usr/lib/mail/aliases, it looks up user in the file /etc/passwd, to see if she is a user on your local system. If smail does not find user in /etc/passwd, it throws away the message and mails an error message to the sender. -> If smail does find user in /etc/passwd, it then looks for file .forward in user's home directory. This file normally contains a list of addresses to which mail is to be forwarded. -> If user's home directory does not contain a file named .forward, smail passes the message to lmail which writes the message into the file /usr/spool/mail/user (the user's ``mailbox''). -> If, however, user does have file .forward in her home directory, smail reads it, and forwards the message to the address or addresses that that file contains. For further information on smail, and on its suite of configuration files, see the Lexicon entry for smail. Before you can send mail to a remote site, you must have set up a UUCP connect to that site, either directly or indirectly. That is, you must have set up UUCP to send mail to that site, or to a system that can forward the mail to some other that may have permission to access the site in question. See the tutorial and Lexicon articles on UUCP for details on using UUCP to exchange mail and files with remote sites. Please note that the routing agents are the only components of the mail system that must run setuid to assume the privilege of the superuser root. Delivery Agents The delivery agents actually move messages to their destination. The delivery agent lmail (``local mail'') places messages into users' mailboxes. To discourage the forging of mail, lmail does not use setuid. It must be run by a privileged user (generally root) so that it will have permission to write mail into every user's mailbox. As a rule, lmail is invoked only by the routing agent; you seldom, if ever, will work directly with lmail. The UUCP uux queues commands for execution on a remote system. The mail system uses uux as a delivery agent; in fact, on most systems, the delivery of mail is uux's principal task. When a message is to be forwarded to a remote site, smail invokes uux to create two files in directory /usr/spool/uucp/site (where site names the site to which mail is being sent). One file, which has the prefix `C', contains the rmail command to be executed on the remote site; the other file, which has the prefix `D', contains the body of the message that rmail is to route. The next time your system polls site (or is polled by site), those files are copied to site, where they are executed by site's copy of the command uuxqt. You can use uux directly to spool commands for execution. For details, see the Lexicon entries for uux and uuxqt. uux uses setuid to assume the identity of user uucp in order to write into the necessary spool directories. Please note that it is very easy to use uux to forge messages to remote systems. Keep this in mind if you plan to use electronic mail for any kind of authorization system. Setting Up a Mail Feed One of the most useful tasks a personal computer can perform for you is let you exchange electronic mail with users on remote systems. The following describes how you can set up your mail system so you can plug into the Internet and begin to exchange mail with the outside world. To begin, the COHERENT system at present can exchange mail with remote systems only via UUCP. To receive mail, you must find a site that has a connection to the Internet -- either direct or indirect -- and is willing to act as a UUCP feeder for you. Such a site may be a local college or university, or a commercial ``Internet provider.'' Once you have located such a site, set up a UUCP connection with that site, as described in this manual's tutorial on UUCP. If you do not have experience in setting up a UUCP site, read this tutorial carefully, as this can be rather tricky. Next, edit file /etc/domain, and set your system's domain to the name of the system from which you will be receiving your feed. For example, if you have purchased Internet service from site acme.com, then /etc/domain should read: acme.com Finally, you must edit file /usr/lib/mail/config to tell smail to forward to the feeder system all messages that are bound for the outside world. You must change two attributes within this file: domains This attribute sets the domain name that smail writes into each mail message's header. This is required so that other users can reply to your messages. Set it to the name of your feeder system; it should be identical to the name you wrote into /etc/domain. For example, if you are purchasing your Internet service from system acme.com, then set the attribute domains to: domains=acme.com smart_path Set this to the name of the remote site as you have set it in file /usr/lib/uucp/sys. For example, if you are purchasing Internet service from site acme.com, you may have used the name acme to name the site within file /usr/lib/uucp/sys. In this instance, you set the smail attribute smart_path as follows: smart_path=acme That's all there is to it. smail's default configurations will handle the rest. Once you have the UUCP connection working properly, then any mail to a user who is not on your local system will be forwarded to the system that is providing your mail feed, and from there forwarded to the remote site to which you addressed it. For details on setting up a UUCP feed, see the UUCP tutorial that appears earlier in this manual; also see the Lexicon entries for UUCP, sys, dial, and port. For more information on modifying smail's configuration file, see the Lexicon entry for config. Mailing to Networks The following gives directions on how to send mail to users on popular networks: America Online Send mail to user@aol.com. Applelink Send mail to user@applelink.apple.com. ATTMail Send mail to user@attmail.com. BITNET Send mail to user@host.bitnet or to user%host.bitnet@gateway. Compuserve Send mail to number.number@compuserve.com. Note that Compuserve addresses are usually given as number,number; you must convert the comma to a period. FidoNet This network uses an unusual addressing scheme. To send mail to John Doe at 1:123/456.0, use the following domain address: f456.n123.z1.fidonet.org. The z1 comes from the 1: at the front of the FidoNode address. Then, put the person's name in front of this, with the at-sign between them: john.doe@f456.n123.z1.fidonet.org If the host label does not end in .0, as in 1:123/456.4, use that digit with p prefixed to it, as follows: john.doe@p4.f456.n123.z1.fidonet.org MCIMail Send mail to user@mcimail.com. MCIMail usually includes a hyphen in user's name; be sure to remove it. UUnet Send mail to user@host.uucp, or to user%host.uucp@gateway, or to user@domain. These directions assume that you have a UUCP link to another system that gives you access to the Internet or other intelligent network. For more information on sending mail to remote systems via UUCP, see the Lexicon entry for UUCP. Files $HOME/.forward -- Forwarding instructions for inbound mail $HOME/.signature -- Personal signature $HOME/dead.letter -- Message that mail could not send /etc/domain -- Name of your system's domain /etc/passwd -- User identities /etc/uucpname -- Name of your system /tmp/mail* -- Temporary and lock files /usr/lib/mail/aliases -- Aliases of users /usr/lib/mail/config -- smail configuration file /usr/lib/mail/fullnames -- Short full name aliases of users /usr/lib/mail/paths -- Mail routing control file /usr/lib/mail/routers -- Information on routing mail to remote sites /usr/lib/mail/transports -- Information on mail-transportation programs /usr/spool/mail -- Mailbox directory, filed by user name See Also aliases, commands, config, cvmail, .forward, mail, mkfnames, msg, nptx, paths, rmail, smail, UUCP Krol, E.: The Whole Internet: User's Guide & Catalog. Sebastopol, Ca.: O'Reilly & Associates, Inc., 1992. Highly recommended.