如何用E-Mail拉文件?

ftp是什么,恐怕不用我说,只不过现在初入网的朋友多在Windows图形界 面下进行ftp,可能对传统的ftp命令就不那么熟悉了。

ftp是Internet上获取文件的工具。由于 CHINANET 目前只 有北京与上海、广州有出口,因而对国外的Internet连接十分拥挤,直接利用 ftp到国外download文件是很不划算的事情。因而我们可以用Email帮忙,当然, 如果你只在国内的北京、上海、广州等地的ftp站download文件,那是完全不 必借助Email的。

闲话少说,下面列出Internet上可以找到的ftpmail服务器:

bitftp@pucc.princeton.edu (美国)
bitftp@plearn.edu.pl (波兰)
ftpmail@cs.uow.edu.au (只对澳大利亚)
ftpmail@garbo.uwasa.fi (芬兰)
ftpmail@inf.tu-dresden.de (德国)
ftpmail@ftp.rz.uni-dresden.de (德国)
ftpmail@ieunet.ie (爱尔兰)
ftpmail@archie.inesc.pt (只对葡萄牙)
ftpmail@ftp.sunet.se (瑞典)
ftpmail@ftp.luth.se (瑞典)
ftpmail@census.gov (美国)
ftp-request@netcom.com (美国)
ftpmail@ftpmail.ramona.vix.com (美国)
ftpmail@decwrl.dec.com (*不存在 *)
ftpmail@sunsite.unc.edu (*不存在 *)
ftpmail@ftp.sun.ac.za (* 不存在 *)
ftpmail@oak.oakland.edu (*只取本地文件 *)
ftpmail@NCTUCCCA.edu.tw (* 只取本地文件 *)
ftpmail@src.doc.ic.ac.uk (英国)
ftpmail@conicit.ve (委内瑞拉)

老实说,笔者也没有一一试过上面列出的地址,而且这些服务器也不是千载不变的,可能有些服务器今天还工作,明天就不干了,也可能明天又有 新的服务器出现。不过,笔者用过前面三个,证明没有问题,读者大可放心 使用。

这些服务器各有千秋,有些还对使用者的请求有些限制,详见下文。笔者常用第一个地址,请看下面例子。

Email到bitftp@vm.gmd.de,Subject可有可无,正文如下:

ftp ftp.microsoft.com
uuencode
chunksize 1000
user anonymous
binary
dir
cd /Services/whql/display/drivers
get TRID96XX.EXE
quit

这封 Email 是让 vm.gmd.de 帮我到 microsoft 的 ftp 站拿取Trident 9660/9680显示卡for Windows 95 的驱动程序,并Email给我。

这封Email除了第一、第二句,其余都是标准的ftp命令,而常用的ftp命 令也只是这些。这份Email就和DOS中的BAT文件类似,第一句指明连接Micro- soft的ftp站,最后的uuencode指明寄回的文件用uuencode编码。请让我为入 网未深的朋友解释一下:

在Internet上,由于Email只能传送ASCII码的文本文件,因而要Email传 送而二进制文件时(例如可执行文件等),就必须编码,把二进制文件编码 成文本文件,当你收到Email后,再将之解码还原成二进制文件。在Internet 上,编码方式有许多种,如uuencode、xxencode、btoa等,而uuencode是最 常用的一种。第二句chunksize 1000指明每封回信最长不超过1000K。如果文 件太长,超过1000K,就将之分成几个文件寄来。这是因为Internet上的文件 有长有短,长达几十兆的也比比皆是(当然,你不会ftp 这些文件吧),而 每个Email邮递系统的性能是有差异,万一你的邮递系统不能处理大文件,你 的Email就收不到了。chunksize指明Email长度的上限。如果写chunksize 0, 那就是说不管文件多大,也不分开,一次寄来。接下来的几句就是标准的ftp 指令了。user anonymous 是指明用anonymous的户名登录,这是ftp上的万能 帐户,也是ftp最重要的特征

──允许匿名登录,以使资源共享。vm.gmd.de会用你的Email地址作密 码。第四句binanry指明用二进制方式传输文件,也就是vm.gmd.de在ftp时用 二进制方式进行,否则你用默认的ASCII文本方式传输回来的二进制文件将是 一堆毫无用处的废物。第五句dir列出Microsoft的ftp站的根目录内容.第六. 七句就是进入目录,拿取TRID96XX.EXE文件,第八句结束任务返回。信寄出 后,你会受到两封回信:一封是vm.gmd.de与ftp.microsoft.com打交道的过 程,就是你直接在unix下ftp时在屏幕上所见的内容,记录着每一条指令的执 行情况。另一封就是uuencode编码后的TRID96XX.EXE文件,你可在DOS下用 uudecode程序将之解码还原。uudecode程序可在任一ftp站取得,广州的朋 友可在info.gz.gdpta.net.cn的/pub/software/util/ms-dos目录下得到。 该目录下保存着Internet上常见的压缩解压工具之DOS版。如果你用Windows 下的Email程序,可能该程序已内置有uudecode功能(如SPPY mail),那就 更简单,直接解码还原就是,无需在DOS下进行。

以上的说明相信已可使你用Email解决大部分的ftp问题,若仍有疑问, 可在正文摆上一句help,你就可得到一份详细的使用说明,当然全是英文的. 这里提醒一下,在Internet上,大部分是Unix的主机,这些系统对大小写是 严格区分的,因此在上述例子中。如果你把TRID96XX.EXE写成trid96xx.exe, 将会得到找不到文件的错误信息,目录名也一样,注意一下这些小问题,以 免徒劳无功。

uuencode编码后,文件长度会增加40%。也就是说,如果你想要的文件 是100K,你收到的Email就会是140K,预先估计一下将要收到的信件长度,以 免你的信箱超载。

还有一个问题是关于大文件的处理。如果文件太大,bitftp@vm.gmd.de 会将之按chunksize指定的尺寸分开几部分再寄给你,你必须将各部分重新合 并成一个完整的编码文件再解码,传统的做法是:①把各封Email按顺序存储 成一个大文件。②把大文件中第一封Email的Begin行之后以及最后一封Email 的End之前的所有信头信息和空白去掉,使之成为一个完整的编码文件。③用 uudecode解码。第②很重要,如果不把文件中的信头信息去掉,通常的uude- code程序解码到此处就会出错,但这又是比较麻烦的一件事。使想,若文件 太大,达两三兆,相信任何一个文本编辑程序也会感到头痛,况且大文件又 是由十几甚至几十封Email合并而成,那么用手工一一把其中的信头信息和空 白删掉也是辛苦的很了。如果你不想浪费时间对付这些信头信息,笔者附上 一个uunconc.c的程序可以为你效劳,使得无需去掉中间的信头信息,直接就 可解码还原。该文件得自gatekeeper.dec.com,笔者将之略作修改,使之可 在PC机下编译通过(Turbo C 2.0,巨模式编译)。本来笔者自己也编了一个 程序完成此功能的,但看到此文件后自叹不如,特此录出,以飨同好。

上面详细介绍了bitftp@vm.gmd.de的用法,还有其余那些ftp mail的用 法也大同小异,摆上一句help,取回一份使用说明慢慢研究即可,其中 bitftp@pucc.princeton.edu所用命令也是标准的ftp 命令,只是限制每位使 用者每封Email只能用5句get命令,每天只为你最多传输1M信息,超过则不予 理会。ftpmail@decwrl.dec.com据说是最著名的一个ftp mail服务器,它限 制每封Email 10个get命令,并且所用的命令也与标准ftp命令有些不同,如 联机用connect而不用ftp或open等。其余的ftp mail我也没尝试过,有待大 家的探索。

无论哪一个ftp mail服务器都不支持mget和put命令,你不能用mget *命 令把某一目录下的文件全拿回来,这当然是为了防止有人长时间占用主机而 妨碍别人的使用。

还有一类ftp mail服务器,他们并不替用户到指定的任意一个ftp站拿文 件,但他们却是附属于某特定的ftp站,专门替用户以Email方式取得该ftp站 上的文件。例如台湾交通大学的ftpmail@nctuccca.edu.tw和美国麻省理工大学的mail-server@rtfm.mit.edu,就分别替用户以Email方式取得nctuccca. edu.tw和rtfm.mit.edu上的文件。前者自称是亚洲最大的ftp站,后者存放着 大量usenet新闻组的归档FAQ文件,颇值得探索一番。这些ftpmail的用法各 不相同,这里不再一一介绍,读者有兴趣的可寄Email到上述地址,打上help 即可。