像 UNIX 时代一样架设 SMTP 服务器

最近需要架设一台 SMTP 服务器用来发件,我起初觉得这不简单。但当你像 UNIX 时代一样架设 SMTP 服务器,它是非常简单的。今天,我就把这篇教程当成我几个小时折腾的总结。

基础知识

首先,UNIX 时代是啥样的?UNIX 时代计算机还十分昂贵,所以大家共享同一台计算机。不同的用户使用终端登入同一台计算机。用户们一般都结成社区。现在,这样的社区还存在但因为大家人手一台计算机就改用 ssh 连接到同一台主机了。这样的社区叫做 tilde 其中 tilde.club 算比较有名的。

所以,起初电子邮件还只是在一台主机中传输。像这样:

$ mail bob
Subject: Hello World

Hello, how are you doing?
EOT

然后 Bob 的终端就会提醒他有新的邮件,使用 mail 命令就可以查看。

现在的电子邮件通过互联网使用 SMTP 协议投递到别的主机。比如 noreply@want.reply.com 中 noreply 就是要投递到的用户,want.reply.com 就是投递到的目标主机。在域名系统还未成熟时,这种投递方式就已经存在。

一封邮件可以由任何人投递,而信封(envelope)也无非就像一个 HTTP 请求一样。以中国的第一封邮件举例(部分地方加上了换行):

Received: from Peking by unika1; Sun, 20 Sep 87 16:55 (MET dst)
Date: Mon, 14 Sep 87 21:07 China Time
From: Mail Administration for China
To: Zorn@germany, Rotert@germany, Wacker@germany, Finken@unika1
CC: lhl@parmesan.wisc.edu, farber@udel.edu, jennings%irlean.bitnet@germany, cic%relay.cs.net@germany, Wang@ze1, RZLI@ze1
Subject: First Electronic Mail from China to Germany
Date: Mon, 14 Sep 87 21:07 China Time

"Ueber die Grosse Mauer erreichen wir alle Ecken der Welt"
"Across the Great Wall we can reach every corner in the world"

Dies ist die erste ELECTRONIC MAIL, die von China aus ueber Rechnerkopplung in die internationalen Wissenschaftsnetze geschickt wird.
This is the first ELECTRONIC MAIL supposed to be sent from China into the international scientific networks via com-puter interconnection between Beijing and Karlsruhe, West Germany (using CSNET/PMDF BS2000 Version).

University of Karlsruhe Institute for Computer Application of
Informatik State Commission of Rechnerabteilung - Machine Industry (IRA) (ICA)

Prof. Dr. Werner Zorn Prof. Wang Yuen Fung
Michael Finken Dr. Li Cheng Chiung
Stephan Paulisch Qui Lei Nan
Michael Rotert Ruan Ren Cheng
Gerhard Wacker Wei Bao Xian
Hans Lackner Zhu Jiang
Zhao Li Hua

可以看到,上面的邮件由 Mail Administration for China 发给德国的 Zorn, Rotert, Wacker 和 unika1 的 Finken。现在的邮件与这封 1987 年的邮件没什么不同,只是邮件头稍微复杂点而已。

电子邮件怎么投递?一封电子邮件的起点是发件人,终点是收件人的收件箱。 中间还要经过服务器的转发,这样的服务器叫做中继(Relay)。一个主机上的内部邮件会被 SMTPd 直接投递到对应用户的收件箱,SMTPd 也可以接收外界的投递然后运送到对应用户的收件箱。SMTPd 还要发件,如果邮件不发往本地用户那么就要充当中继,投递给对方。

继续阅读“像 UNIX 时代一样架设 SMTP 服务器”