Configuring Fetchmail, Exim4 and Mutt

Thursday, November 12th, 2009 @ 2:07 am

MailConcept
~~~~~~~~~~~~~
配置Mutt比想象的要复杂,因为在此之前我基本上对邮件服务是一窍不通,所以还是先了解邮件的基本原理,它主要包括下面几个部分:

  • MTA (Mail Transfer Agent): 邮件传输代理,主要负责将邮件转发到目的服务器的MTA,MTA之间的通讯采用SMTP (Simple Mail Transfer Protocol)协议。流行的软件有:
    + http://www.sendmail.org
    + http://www.exim.org
    + http://www.postfix.org
  • MDA (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: , , ,
Posted in Technology | No Comments »

Leave a Reply