Fetchmail will get mail from your email on the net (your ISP account and wherever else you have an email account) and pass the mail off to procmail running on your mail server to put it in your mail account on your server. It can handle a wide variety of mail servers including POP3 and IMAP, but it can not handle an Exchange Server.
Although fetchmail can be configured to handle quite a variety of chores, we will keep it simple here. For each user that has an email account on the internet create a file: ~/.fetchmailrc For user jpollman on our server, the file /home/jpollman/.fetchmailrc looks like this:
poll www.deniz.com with proto POP3
user "jpollman" there with password "mypassword" is jpollman here
Explaining each part:
poll www.deniz.com: contact www.deniz.com which is my ISP's pop3 server.
with proto POP3: use the pop3 protocol to get the mail.
user "jpollman" there: my login name for email on my ISP.
with password "mypassword": this is my password to my ISP.
is jpollman here: jpollman is the user on our home mail server.
Put a .fetchmailrc file in the home directory of each user that needs to get mail from the internet. Note: each .fetchmail will be a little different because everyone has a different email address on the internet. Also, fetchmail is very particular about permissions and ownership - which is a good thing as email passwords need to be kept private. To make sure .fetchmailrc is correct, using the example above for jpollman:
chown jpollman /home/jpollman/.fetchmailrc [Enter]If a user has more than one account on the internet, just add additional lines starting with: poll.
chmod 700 /home/jpollman/.fetchmailrc [Enter]
We could have set fetchmail to run as a daemon and poll the ISP every so often, but fetchmail will cause diald to call out if we are not connected. Instead we have a simple script, I call it: getmail, that is called both by cron and by ip-up.local - see below for examples. Here it is:
if [ -f /var/lock/LCK..ttyS3 ]; then
su jpollman -c fetchmail
su bmote -c fetchmail
When it runs, it first checks to see if we are connected (diald puts a file called LCK..ttyS3 in my /var/lock directory when it is connected, and removes it when it disconnects.) Note: you may have set diald up differently than we did, or may be using pppd daemon, or using a different com port, so the lock file may have a different name. This script exits if the lock file is not there. If we are connected, the script will use su to become jpollman and executes the fetchmail program. The -c means; run the following command. After fetchmail is has gotten jpollman's mail, the script becomes bmote via su and runs fetchmail to get his mail. Note: jpollman and bmote are user names on our server - not the names for their ISP email accounts.
Cron: here is a really quick, down-n-dirty, tutorial on cron. Crond is the daemon that is started when your machine boots, and so, is always running in the background. It reads the crontab files every minute to see if anything needs to run. You need to create a crontab for user "root". To do this, as root, type:
crontab crontab [Enter]Root now has his own crontab file - which is identical to the system's crontab file. To edit root's crontab, type
crontab -e [Enter]Leave all the header line alone and delete the program lines. When you are done, it should look something like this:
SHELL=/bin/bashTo make cron run a program, add a line with 6 fields: the first five are the time fields and the six field is the program. As an example:
0 1 * * * getmailThe time fields are broken down this way:
The time and date fields are:
field allowed values
day of month 0-31
month 0-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
A field may
be an asterisk (*), which always stands for
Ranges of numbers are allowed.
Ranges are two numbers
separated with a hyphen. The specified range is inclu-
sive. For example, 8-11 for an ``hours'' entry specifies
execution at hours 8, 9, 10 and 11.
So, in the above example (0 1 * * * getmail) getmail will run at 1 o'clock in the morning everyday. I would prefer to have it run every 5 minutes, so my crontab entry looks like this:
0-59/12 * * * * /usr/local/bin/getmailTo find out more about the crontab file, type:
man 5 crontab [Enter]ip-up.local: to have the script run every time you connect, just add it to your /etc/ppp/ip-up.local (or ip-up file if that is all you have). To add it, just type it in as a single line with full path. Mine looks like this: