Exim4

简介

Exim4 是 Debian 默认的 MTA (Message Transfer Agent) ,连基本系统里面都 有它,用他自然是和系统兼容性最好的了。在 Debian 下配置 Exim 很方便,系 统提供了一个配置脚本,可以通过回答问题的方式来进行配置。

这里我要把 Exim4 配置为可以连接到学校的 SMTP 服务器进行发信,这样就可 以在 Mutt 里面使用 Exim4 来发信了。

配置脚本

Debian 里面提供了 Exim4 的配置脚本,其实在安装系统的时候就已经运行过他 了,不过那个时候我选择仅在本地投递。随时可以运行 dpkg-reconfigure exim4-config 来进行重新配置。

它会向你提一些问题,关于这些问题的详细解释可以查看系统里面的 /usr/share/doc/exim4/README.Debian.html

Split configuration into small files?
配置文件可以存放成一个单一文 件,也可以分类存放,各有各的好处,因为后面我们还要手工修改配置文件,这 里就选择不分割了。
General type of mail configuration
这里选择 mail sent by smarthost; recieved via SMTP or fetchmail ,就是我们要配置的类型。
System mail name
这里就让他是 localhost.localdomain 吧。乱填的话有可 能导致本地投递的邮件投递失败。
IP-address to listen on for incoming SMTP connections
我只是自己使用 用,所以这里就是默认的 127.0.0.1 就可以了。
Other destinations for which mail is accepted
这里也只填 localhost.localdomain
Machines to relay mail for
这里我留空了。
Machine handling outgoing mail for this host (smarthost)
这里就是填 要用来发送邮件的 SMTP 服务器的地址。我这里填上了 zjuem.zju.edu.cn
Hide local mail name in outgoing mail?
这个随便了。我这里选择了是。
Visible domain name for local users
由于我上一个选项选了是,它让我填 这个内容,我就胡乱填了一个 kid.org
Keep number of DNS-queries minimal (Dial-on-Demand)?
这里我选择了他 默认选中的 No

这样就算基本配置完毕,更复杂的配置任务还需要手工修改配置文件。比如,SMTP 的验证问题,为了避免垃圾邮件泛滥,现在很多 SMTP 服务器都需要经过验证才 能发邮件,查看 /usr/share/doc/exim4/README.Debian.html 知道配置 Exim4 作为 SMTP 客户端的时候的用户名和密码在 /etc/exim4/passwd.client 文件里 面配置,语法为:从左到由分别是服务器、用户名、密码,中间用冒号隔开。因 为我只配置了一个 Smarthost 作为 SMTP 服务器,这里直接用通配符星号表示 了:

*:pluskid:password

运行测试

测试 Exim4

用系统自带的 mail 命令来尝试发送一下邮件:

mail pluskid@mstczju.org

提示输入主题,然后是邮件内容。邮件内容一一行唯一的 . 标记结束。发送邮 件之后,可以登陆到邮箱中,发现并没有收到邮件。可以通过查看 Exim4 的日 志看到底出了什么问题:

tail /var/log/exim4/mainlog

发现 SMTP 服务器提示 550 mailbox unavailable 。

测试 SMTP 服务器

为了弄清楚到底是怎么回事,我们 telnet 到 SMTP 服务器上。以下“>”开头的 表示我们的输入,其他的则表示服务器的反馈。

可以看到什么情况下会出现这个错误了,错误是因为没有经过认证的步骤。下面 我们再尝试一次,并加上认证的过程。认证中需要输入用户名和密码,都是经过 base64 编码的,在 Emacs 里面可以通过 M-x base64-encode-region 来对选中 的区域进行 base64 编码。

可以看出确实是没有经过认证才出现那个问题的。通过查看 README.Debian.html 可以看出,由于 SMTP 服务器不支持 TLS 加密和 CRAM MD5 认证方式,密码都是明文传递(虽然经过了 base64 编码),这是非常不安全 的,因此默认被禁止使用这种认证方式。要打开这个选项,需要在配置文件里面 修改。

重新配置

Debian 系统提供一个配置模板,并使用一个脚本动态生成配置文件公 Exim4 使 用。模板取决于前面对配置文件的选择,如果选择了单一配置文件,那么这个模 板就是 /etc/exim4/exim4.conf.template 文件。打开并搜索 AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS ,这就类似于 c 语言的宏那样,在前面 的适当位置定义一下这个变量就可以了:

AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS = true

修改了模板之后,我们重新运行一下脚本,重新生成一下配置文件

/usr/sbin/update-exim4.conf

这下终于可以正常使用了。