Total Pageviews

Thursday, 10 November 2011

使用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 服务器上。以下“>”开头的表示我们的输入,其他的则表示服务器的反馈。

> telnet zjuem.zju.edu.cn 25
Trying 10.10.2.41...
Connected to zjuem.zju.edu.cn.
Escape character is '^]'.
220 smtp ready
> helo
250 eyou.net HELO, pleased to meet
> ehlo
250-eyou.net HELO, pleased to meet
250-AUTH=LOGIN PLAIN
250-AUTH LOGIN PLAIN
250-PIPELINING
250 8BITMIME
> mail from: <pluskid@zju.edu.cn>
250 OK
> rcpt to: <pluskid@mstczju.org>
550 mailbox unavailable. (邮箱不存在)
Connection closed by foreign host.

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

> telnet zjuem.zju.edu.cn 25
Trying 10.10.2.41...
Connected to zjuem.zju.edu.cn.
Escape character is '^]'.
220 smtp ready
> helo
250 eyou.net HELO, pleased to meet
> ehlo
250-eyou.net HELO, pleased to meet
250-AUTH=LOGIN PLAIN
250-AUTH LOGIN PLAIN
250-PIPELINING
250 8BITMIME
> auth login
334 VXNlcm5hbWU6
> cGx1c2tpZA==
334 UGFzc3dvcmQ6
> cGFzc3dvcmQ=
235 go ahead
> mail from: <pluskid@zju.edu.cn>
250 OK
> rcpt to: <pluskid@mstczju.org>
250 OK
> data
354 go ahead
> From: pluskid@zju.edu.cn
> To: pluskid@mstczju.org
> Subject: have a test
>
> This is the mail data
>
> .
250 OK:has queued
> quit
221 close connection
Connection closed by foreign host.

可 以看出确实是没有经过认证才出现那个问题的。通过查看 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

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

Exim4配置smarthost使用gmail发邮件

debian发行版(包括ubuntu)使用exim4作为默认的邮件服务器, 如果想使用gmail account发送邮件, 需要做一下配置:

# dpkg-reconfigure exim4-config

   1. 选择: 用 smarthost 发信: 无本地邮件
   2. 输入系统邮件名称: etc, company.com
   3. 输入监听的ip地址: 127.0.0.1
   4. 请输入被此主机认为是以其自身为最终目的地址的域名列表: 空
   5. 本地用户的可见域名: etc, company.com
   6. 寄信使用的 smarthost 的 IP 地址或主机名: smtp.gmail.com::587
   7. 为下列主机进行邮件中转 (relay): 空
   8. 保持最小 DNS 查询量吗 (按需拔号,Dial-on-Demand): No
   9. 将设置文件分拆成小文件吗: No(Yes也可以)
  10. Root 和 postmaster 邮件的接收者: 空

# vi /etc/exim4/passwd.client 添加如下行, 注意修改用户名和密码
Java代码

   1. gmail-smtp.l.google.com:yourAccountName@gmail.com:y0uRpaSsw0RD 
   2. *.google.com:yourAccountName@gmail.com:y0uRpaSsw0RD 
   3. smtp.gmail.com:yourAccountName@gmail.com:y0uRpaSsw0RD 

gmail-smtp.l.google.com:yourAccountName@gmail.com:y0uRpaSsw0RD *.google.com:yourAccountName@gmail.com:y0uRpaSsw0RD smtp.gmail.com:yourAccountName@gmail.com:y0uRpaSsw0RD

# /etc/exim4/update-exim4.conf

# /etc/init.d/exim4 restart

重启完成后就可以发邮件了.
------------------------------
Ubuntu下实现exim4 配置gmail全步骤

1.    sudo apt-get install exim4 
2.    如果自动启动设置界面就设置,没有的话sudo dpkg-reconfigure exim4-config

   1. 选择: 用 smarthost 发信: 无本地邮件
   2. 输入系统邮件名称: etc, company.com
   3. 输入监听的ip地址: 127.0.0.1
   4. 请输入被此主机认为是以其自身为最终目的地址的域名列表: 空
   5. 本地用户的可见域名: etc, company.com
   6. 寄信使用的 smarthost 的 IP 地址或主机名: smtp.gmail.com::587
   7. 为下列主机进行邮件中转 (relay): 空
   8. 保持最小 DNS 查询量吗 (按需拔号,Dial-on-Demand): No
   9. 将设置文件分拆成小文件吗: No(Yes也可以)
  10. Root 和 postmaster 邮件的接收者: 空

3.    sudo gedit /etc/exim4/passwd.client 加入下面3行 (改成自己的账号和密码)

   1. gmail-smtp.l.google.com:yourAccountName@gmail.com:y0uRpaSsw0RD 
   2. *.google.com:yourAccountName@gmail.com:y0uRpaSsw0RD 
   3. smtp.gmail.com:yourAccountName@gmail.com:y0uRpaSsw0RD

4.     sudo gedit  /etc/exim4/exim4.conf.template  
搜索    AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS,在之后加入一行代码

AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS = true

5.     sudo /etc/exim4/update-exim4.conf
6.    sudo /etc/init.d/exim4 restart


Test:
~:mail XXXX@gmail.com

SUBJECT: XXXX
XXXX(正文)
.(单独一行只有"." 为结束符号 )
Cc:(直接回车就可以)

查下邮箱收到没???

另:
tail /var/log/exim4/mainlog 查看日志。

No comments:

Post a Comment