下一页 上一页 目录

3. 压缩电子邮件

3.1 接收电子邮件 (POP3, IMAP4)

大多数人通过 POP3 协议从邮件服务器获取电子邮件。POP3 协议有很多缺点。

  1. POP3 以明文传输密码。(POP/IMAP 有 SSL 实现以及质询/应答身份验证,定义在 RFC-2095/2195 中)。
  2. POP3 协议会产生很多协议开销:首先客户端请求消息,然后服务器发送消息。之后客户端请求删除已传输的文章。服务器确认删除。之后服务器准备好进行下一个事务。因此,每封电子邮件需要 4 个事务。
  3. POP3 在传输邮件时没有压缩,尽管电子邮件是高度可压缩的(压缩比为 3.5 倍)。

你可以通过将 localhost:110 端口通过压缩连接转发到你的 ISP 的 POP3 套接字来压缩 POP3。之后,你必须告诉你的邮件客户端连接到 localhost:110 才能下载邮件。这可以保护并加速连接,但下载时间仍然会受到 POP3 固有的协议开销的影响。

用更高效的协议替代 POP3 是有意义的。想法是一次性下载整个邮箱,而不会产生协议开销。此外,压缩连接也是有意义的。提供这两种功能的合适工具是 SCP。你可以像这样下载你的邮件文件

scp -C -l loginId:/var/spool/mail/loginid /tmp/newmail

但这里有一个问题:如果在下载邮箱期间服务器收到新邮件会发生什么?新邮件将会丢失。因此,使用以下命令更有意义

ssh -l loginid mailserver -f mv /var/spool/mail/loginid /tmp/loginid_fetchme

scp -C -l loginid:/tmp/loginid_fetchme /tmp/newmail

移动 (mv) 是一个基本操作,因此在命令执行期间收到新邮件也不会遇到问题。但是,如果邮件服务器目录 /tmp/ 和 /var/spool/mail 不在同一个磁盘上,你可能会遇到问题。一个解决方案是在服务器上执行 mv 之前创建一个锁文件:touch /var/spool/mail/loginid.lock。之后你应该删除它。一个更好的解决方案是在同一目录下移动文件 loginid

ssh -l loginid mailserver -f mv /var/spool/mail/loginid /var/spool/mail/loginid_fetchme

之后,你可以使用 formail 而不是 procmail,以便将 /tmp/newmail 过滤到正确的文件夹中:formail -s procmail < /tmp/newmail

3.2 发送电子邮件 (SMTP)

你可以通过压缩和加密的 SSH 连接发送电子邮件,以便

如果你拥有邮件服务器的 SSH 访问权限,你需要以下命令

ssh -C -l loginid mailserver -L2525:mailserver:25

如果你没有邮件服务器的 SSH 访问权限,但可以访问一台允许使用你的邮件服务器作为中继的服务器,则命令是

ssh -C -l loginid other_server -L2525:mailserver:25

之后,你可以配置你的邮件客户端(或邮件服务器:参见 “smarthost”)将邮件发送到 localhost 的 2525 端口。


下一页 上一页 目录