Next: Mail Source Functions, Up: Mail Sources
You tell Gnus how to fetch mail by setting mail-sources
(see Fetching Mail) to a mail source specifier.
Here's an example:
(pop :server "pop3.mailserver.com" :user "myname")
As can be observed, a mail source specifier is a list where the first element is a mail source type, followed by an arbitrary number of keywords. Keywords that are not explicitly specified are given default values.
The mail-sources is global for all mail groups. You can specify
an additional mail source for a particular group by including the
group mail specifier in mail-sources, and setting a
mail-source group parameter (see Group Parameters) specifying
a single mail source. When this is used, mail-sources is
typically just (group); the mail-source parameter for a
group might look like this:
(mail-source . (file :path "home/user/spools/foo.spool"))
This means that the group's (and only this group's) messages will be fetched from the spool file ‘/user/spools/foo.spool’.
The following mail source types are available:
fileKeywords:
:pathrmail-spool-directory
(usually something like /usr/mail/spool/user-name).
:prescript:postscriptAn example file mail source:
(file :path "/usr/spool/mail/user-name")
Or using the default file name:
(file)
If the mail spool file is not located on the local machine, it's best to use POP or IMAP or the like to fetch the mail. You can not use ange-ftp file names here—it has no way to lock the mail spool while moving the mail.
If it's impossible to set up a proper server, you can use ssh instead.
(setq mail-sources
'((file :prescript "ssh host bin/getmail >%t")))
The ‘getmail’ script would look something like the following:
#!/bin/sh
# getmail - move mail from spool to stdout
# flu@iki.fi
MOVEMAIL=/usr/lib/emacs/20.3/i386-redhat-linux/movemail
TMP=$HOME/Mail/tmp
rm -f $TMP; $MOVEMAIL $MAIL $TMP >/dev/null && cat $TMP
Alter this script to fit the ‘movemail’ and temporary
file you want to use.
directoryfoo.bar. (You can change the suffix
to be used instead of .spool.) Setting
nnmail-scan-directory-mail-source-once to non-nil forces
Gnus to scan the mail source only once. This is particularly useful
if you want to scan mail groups at a specified level.
There is also the variable nnmail-resplit-incoming, if you set
that to a non-nil value, then the normal splitting process is
applied to all the files from the directory, Splitting Mail.
Keywords:
:path:suffix:predicatenil are returned.
The default is identity. This is used as an additional
filter—only files that have the right suffix and satisfy this
predicate are considered.
:prescript:postscriptAn example directory mail source:
(directory :path "/home/user-name/procmail-dir/"
:suffix ".prcml")
popKeywords:
:server:port:user:password:programformat-like string. Here's an example:
fetchmail %u@%s -P %p %t
The valid format specifier characters are:
The values used for these specs are taken from the values you give the
corresponding keywords.
:prescript:program keyword. This can also be a function to be run.
One popular way to use this is to set up an SSH tunnel to access the POP server. Here's an example:
(pop :server "127.0.0.1"
:port 1234
:user "foo"
:password "secret"
:prescript
"nohup ssh -f -L 1234:pop.server:110 remote.host sleep 3600 &")
:postscript:program keyword. This can also be a function to be run.
:function:authenticationpassword or the symbol apop
and says what authentication scheme to use. The default is
password.
If the :program and :function keywords aren't specified,
pop3-movemail will be used. If pop3-leave-mail-on-server
is non-nil the mail is to be left on the POP server
after fetching when using pop3-movemail. Note that POP servers
maintain no state information between sessions, so what the client
believes is there and what is actually there may not match up. If they
do not, then you may get duplicate mails or the whole thing can fall
apart and leave you with a corrupt mailbox.
Here are some examples for getting mail from a POP server. Fetch from the default POP server, using the default user name, and default fetcher:
(pop)
Fetch from a named server with a named user and password:
(pop :server "my.pop.server"
:user "user-name" :password "secret")
Use ‘movemail’ to move the mail:
(pop :program "movemail po:%u %t %p")
maildirKeywords:
:path:subdirsYou can also get mails from remote hosts (because maildirs don't suffer from locking problems).
Two example maildir mail sources:
(maildir :path "/home/user-name/Maildir/"
:subdirs ("cur" "new"))
(maildir :path "/user@remotehost.org:~/Maildir/"
:subdirs ("new"))
imapKeywords:
:server:port:user:password:streamimap-stream-alist. Right now, this means
‘gssapi’, ‘kerberos4’, ‘starttls’, ‘tls’,
‘ssl’, ‘shell’ or the default ‘network’.
:authenticationimap-authenticator-alist. Right now,
this means ‘gssapi’, ‘kerberos4’, ‘digest-md5’,
‘cram-md5’, ‘anonymous’ or the default ‘login’.
:programimap-shell-program variable. This should be a
format-like string (or list of strings). Here's an example:
ssh %s imapd
Make sure nothing is interfering with the output of the program, e.g., don't forget to redirect the error output to the void. The valid format specifier characters are:
imap-default-user.
The values used for these specs are taken from the values you give the
corresponding keywords.
:mailbox:predicate:fetchflag:dontexpungenil, don't remove all articles marked as deleted in the
mailbox after finishing the fetch.
An example IMAP mail source:
(imap :server "mail.mycorp.com"
:stream kerberos4
:fetchflag "\\Seen")
groupmail-source group parameter,
See Group Parameters.
Keywords:
:pluggednil, fetch the mail even when Gnus is unplugged. If you
use directory source to get mail, you can specify it as in this
example:
(setq mail-sources
'((directory :path "/home/pavel/.Spool/"
:suffix ""
:plugged t)))
Gnus will then fetch your mail even when you are unplugged. This is useful when you use local mail and news.