37.5 Rmail Files and Inboxes
When you receive mail locally, the operating system places incoming
mail for you in a file that we call your inbox. When you start
up Rmail, it runs a C program called movemail
to copy the new
messages from your local inbox into your primary Rmail file, which
also contains other messages saved from previous Rmail sessions. It
is in this file that you actually read the mail with Rmail. This
operation is called getting new mail. You can get new mail at
any time in Rmail by typing g.
The variable rmail-primary-inbox-list
contains a list of the
files which are inboxes for your primary Rmail file. If you don't set
this variable explicitly, it is initialized from the MAIL
environment variable, or, as a last resort, set to nil
, which
means to use the default inbox. The default inbox is
/var/mail/username, /usr/spool/mail/username,
or /usr/mail/username, depending on your operating system.
To see what the default is on your system, use C-h v
rmail-primary-inbox-list <RET>. You can specify the inbox file(s) for
any Rmail file with the command set-rmail-inbox-list
; see
Rmail Files.
There are two reasons for having separate Rmail files and inboxes.
- The inbox file format varies between operating systems and according to
the other mail software in use. Only one part of Rmail needs to know
about the alternatives, and it need only understand how to convert all
of them to Rmail's own format.
- It is very cumbersome to access an inbox file without danger of losing
mail, because it is necessary to interlock with mail delivery.
Moreover, different operating systems use different interlocking
techniques. The strategy of moving mail out of the inbox once and for
all into a separate Rmail file avoids the need for interlocking in all
the rest of Rmail, since only Rmail operates on the Rmail file.
Rmail was written to use Babyl format as its internal format. Since
then, we have recognized that the usual inbox format on Unix and GNU
systems is adequate for the job, and we plan to change Rmail to use that
as its internal format. However, the Rmail file will still be separate
from the inbox file, even on systems where their format is the same.
When getting new mail, Rmail first copies the new mail from the inbox
file to the Rmail file; then it saves the Rmail file; then it truncates
the inbox file. This way, a system crash may cause duplication of mail
between the inbox and the Rmail file, but cannot lose mail. If
rmail-preserve-inbox
is non-nil
, then Rmail will copy new
mail from the inbox file to the Rmail file without truncating the inbox
file. You may wish to set this, for example, on a portable computer you
use to check your mail via POP while traveling, so that your mail will
remain on the server and you can save it later on your workstation.
In some cases, Rmail copies the new mail from the inbox file
indirectly. First it runs the movemail
program to move the mail
from the inbox to an intermediate file called
~/.newmail-inboxname. Then Rmail merges the new mail from
that file, saves the Rmail file, and only then deletes the intermediate
file. If there is a crash at the wrong time, this file continues to
exist, and Rmail will use it again the next time it gets new mail from
that inbox.
If Rmail is unable to convert the data in
~/.newmail-inboxname into Babyl format, it renames the file
to ~/RMAILOSE.n (n is an integer chosen to make the
name unique) so that Rmail will not have trouble with the data again.
You should look at the file, find whatever message confuses Rmail
(probably one that includes the control-underscore character, octal code
037), and delete it. Then you can use 1 g to get new mail from
the corrected file.