Configuring Fetchmail, Exim4 and Mutt
MailConcept
~~~~~~~~~~~~~
配置Mutt比想象的要复杂,因为在此之前我基本上对邮件服务是一窍不通,所以还是先了解邮件的基本原理,它主要包括下面几个部分:
MTA (Mail Transfer Agent): 邮件传输代理,主要负责将邮件转发到目的服务器的MTA,MTA之间的通讯采用SMTP (Simple Mail Transfer Protocol)协议。流行的软件有:
+ http://www.sendmail.org
+ http://www.exim.org
+ http://www.postfix.orgMDA (Mail Delivery Agent): 邮件投递代理,当邮件到达目的主机,不用再继续转发的时候,MTA会将邮件交给MDA,由它来投递到相应用户。本文用到的http://www.procmail.org/就是一款流行的MDA。MRA (Mail Retrieval Agent): 邮件获取代理,负责以POP或者IMAP协议将远程邮件服务器的邮件取到本机。fetchmail就是一款典型的MRA。MUA (Mail User Agent)邮件用户代理,也就是经常使用的邮件客户端,主要功能是让用户管理和读取存贮在用户目录上的邮件。包括对邮件内容的加密和解密。典型的MUA有Mutt, Outlook, Foxmail, kmail, evolution等。
Mutt于其他客户端不同的是,它没有内置smtp的访问,也就是说它不能直接发送邮件,官方对此的解释是 “one task per tool” 符合Unix哲学。不过Mutt内置了一些MRA的基本功能,为什么这么做,可以参考:http://wiki.mutt.org/?MailConcept。本文仍然使用一个独立的MRA。
下图会有助于你理解上面的概念:
+----------------------------------+ |domain A | |MUA (mutt) | |tommy send two mails(bob@A,bito@B)| +----------------------------------+ | | v +----------+ bito@B +----------+ bito@B +----------+ |domain A |non-local|domain B | local |domain B | | MTA |-------->| MTA |-------->| MDA | | Check | SMTP | Check | | | +----------+ +----------+ +----------+ |bob@A | |local |deliver v v +----------+ +----------+ +----------+ |domain A | bito@B |domain A | bito@B |domain B | | MDA |<--------| MRA |<--------|bito's | | | | | POP/IMAP|mail box | +----------+ +----------+ +----------+ |deliver(bob is bito) |bob@A,bito@B v +----------+ +-------------------------------+ |domain A | |domain A | |bob's |-------->|MUA (mutt) | |mail box | |bob get two mails(bob@A,bito@B)| +----------+ +-------------------------------+
Exim4
~~~~~~~
Debian lenny已经内置了Exim4,所以执行通过下面命令进行配置:
$ dpkg-reconfigure exim4-config
如何配置可以参考http://wiki.debian.org/GmailAndExim4,完成后查看
/etc/exim4/update-exim4.conf.conf的内容为:
dc_eximconfig_configtype='smarthost' dc_other_hostnames='' dc_local_interfaces='127.0.0.1' dc_readhost='' dc_relay_domains='' dc_minimaldns='false' dc_relay_nets='' dc_smarthost='smtp.gmail.com::587' CFILEMODE='644' dc_use_split_config='false' dc_hide_mailname='false' dc_mailname_in_oh='true' dc_localdelivery='mail_spool'
修改passwd.client文件,添加gmail帐户
gmail-smtp.l.google.com:yourname@gmail.com:yourpassword *.google.com:yourname@gmail.com:yourpassword smtp.gmail.com:yourname@gmail.com:yourpassword
Fetchmail
~~~~~~~~~~~
安装fetchmail:
$ sudo aptitude install fetchmail
在用户根目录下建立fetchmail的配置文件:
$ vi ~/.fetchmailrc
添加下面内容,使fetchmail以imap协议连接gmail,并获得邮件。
set postmaster tommy set bouncemail poll imap.gmail.com with proto IMAP user 'yourname' there with password 'yourpassord' is 'tommy' here mda "/usr/bin/procmail -d %T" keep ssl sslcertck sslcertpath /etc/ssl/certs
这里面有明文密码,所以上权限,安全一点:
$ chmod 600 .fetchmailrc
这时候实际上已经可以从gmail server上获取邮件了。试一下:
$ fetchmail -v
如果有新邮件,会在 /var/spool/mail/tommy下,将fetchmail加到crontab中,这里让它每4个小时取一下新邮件:
# m h dom mon dow command 0 */4 * * * /usr/bin/fetchmail --silent --syslog
Procmail
~~~~~~~~~~
procmail是debian默认已经装好了,这里只需要配置它,依然先建立一个配置文件:
$ vi ~/.procmailrc
并加入下面内容:
PATH=/bin:/usr/bin:/usr/local/bin MAILDIR=$HOME/mail
因为没有设置默认的投递路径,所以procmail会将tommy的邮件投递到/var/mail/tommy下。
Mutt
~~~~~~
mutt也是debian默认装好的,也只需配置它,继续建配置文件:
#======================================================# # Folders set folder="$HOME/mail" # Local mailboxes stored here set record="+sent" # Where to store sent messages set mbox="+mbox" set postponed="+postponed" # Where to store draft messages set mbox_type=mbox # Mailbox type set move=no # Don't move mail from spool
有了上面这几句,mutt就可以读取你用fetchmail取得的邮件了。
Reference
~~~~~~~~~~~
[1] http://wiki.debian.org/GmailAndExim4
[2] http://www.cs.ru.nl/~tews/user-smarthost.html
[3] Using Mutt with Gmail
[4] Retrieving Emails From Remote Servers With fetchmail (Debian Etch)
[5] Mutt电子邮件快速入门指南
[6] http://wiki.mutt.org/index.cgi?MuttGuide
Tags: exim4, fetchmail, mutt, procmail
Posted in Technology | No Comments »