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 [email protected]

提示输入主题,然后是邮件内容。邮件内容一一行唯一的 . 标记结束。发送邮 件之后,可以登陆到邮箱中,发现并没有收到邮件。可以通过查看 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

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