简介
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
这下终于可以正常使用了。