17.1. 什么是邮件消息?

邮件消息通常由消息体(即消息的文本)和特殊的管理数据组成,这些数据指定了收件人、传输媒介等,类似于您在查看实体信件的信封时看到的内容。

这些管理数据分为两类。第一类是特定于传输媒介的任何数据,例如发件人和收件人的地址。因此,它被称为信封。当消息传递时,它可能会被传输软件转换。

第二类是处理邮件消息所需的任何数据,这些数据不特定于任何传输机制,例如消息的主题行、所有收件人的列表以及消息的发送日期。在许多网络中,将此数据前置到邮件消息中已成为标准做法,从而形成了所谓的邮件头。它与邮件体之间用一个空行分隔。[1]

Unix 世界中的大多数邮件传输软件都使用 RFC-822 中概述的标头格式。它的最初目的是为 ARPANET 上的使用指定一个标准,但由于它被设计为独立于任何环境,因此很容易适应其他网络,包括许多基于 UUCP 的网络。

然而,RFC-822 只是最低标准。更新的标准已经被构想出来,以应对不断增长的需求,例如数据加密、国际字符集支持和 MIME(多用途 Internet 邮件扩展,在 RFC-1341 和其他 RFC 中描述)。

在所有这些标准中,标头由多行组成,这些行由行尾序列分隔。一行由字段名称(从第一列开始)和字段本身(由冒号和空格偏移)组成。每个字段的格式和语义因字段名称而异。如果下一行以空格字符(例如制表符)开头,则标头字段可以跨越换行符继续。字段可以以任何顺序出现。

一个典型的邮件头可能如下所示
Return-Path: <ph10@cus.cam.ac.uk>
Received: ursa.cus.cam.ac.uk (cusexim@ursa.cus.cam.ac.uk [131.111.8.6])
    by al.animats.net (8.9.3/8.9.3/Debian 8.9.3-6) with ESMTP id WAA04654
    for <terry@animats.net>; Sun, 30 Jan 2000 22:30:01 +1100
Received: from ph10 (helo=localhost) by ursa.cus.cam.ac.uk with local-smtp
    (Exim 3.13 #1) id 12EsYC-0001eF-00; Sun, 30 Jan 2000 11:29:52 +0000
Date: Sun, 30 Jan 2000 11:29:52 +0000 (GMT)
From: Philip Hazel <ph10@cus.cam.ac.uk>
Reply-To: Philip Hazel <ph10@cus.cam.ac.uk>
To: Terry Dawson <terry@animats.net>, Andy Oram <andyo@oreilly.com>
Subject: Electronic mail chapter
In-Reply-To: <38921283.A58948F2@animats.net>
Message-ID: <Pine.SOL.3.96.1000130111515.5800A-200000@ursa.cus.cam.ac.uk>

通常,所有必要的标头字段都由您使用的邮件程序界面生成,例如 elmpinemushmailx。但是,有些是可选的,可以由用户添加。例如,elm 允许您编辑消息头的某些部分。其他标头则由邮件传输软件添加。如果您查看本地邮箱文件,您可能会看到每封邮件消息前面都有一行 “From”(注意:没有冒号)。这不是 RFC-822 标头;它是您的邮件软件为了方便读取邮箱的程序而插入的。为了避免消息体中也以 “From” 开头的行可能引起的问题,标准的做法是在任何此类出现之前添加一个 > 字符来转义它。

此列表是常见标头字段及其含义的集合

发件人

这包含发件人的电子邮件地址,可能还包含“真实姓名”。这里使用了各种各样的格式。

收件人

这是收件人电子邮件地址的列表。多个收件人地址用逗号分隔。

抄送

这是将接收邮件“碳副本”的电子邮件地址列表。多个收件人地址用逗号分隔。

暗抄送

这是将接收邮件“碳副本”的电子邮件地址列表。“抄送:”和“暗抄送:”之间的主要区别在于,“暗抄送:”中列出的地址不会出现在传递给任何收件人的邮件消息的标头中。这是一种提醒收件人您已将邮件副本发送给其他人,但不会告诉他们那些其他人是谁的方式。多个收件人地址用逗号分隔。

主题

用简短的几句话描述邮件的内容。

日期

提供邮件发送的日期和时间。

答复至

指定发件人希望收件人回复的地址。如果您有多个邮箱,但希望只在常用的邮箱中接收大部分邮件,此字段会很有用。这是一个可选字段。

组织

拥有邮件发出的机器的组织。如果您的机器是您私有的,则可以省略此字段,或者插入“private”或一些完全无意义的内容。此字段未在任何 RFC 中描述,并且是完全可选的。一些邮件程序直接支持它,但许多程序不支持。

消息ID

由始发系统上的邮件传输生成的字符串。它唯一地标识此消息。

已接收

每个处理您邮件的站点(包括发件人和收件人的机器)都会在标头中插入这样的字段,给出其站点名称、消息 ID、接收消息的时间和日期、来自哪个站点以及使用的传输软件。这些行允许您跟踪消息的路由,如果出现问题,您可以向负责人投诉。

X-任何内容

任何与邮件相关的程序都不应抱怨任何以X-开头的标头。它用于实现尚未纳入 RFC 或永远不会纳入 RFC 的附加功能。例如,曾经有一个非常大的 Linux 邮件列表服务器,它允许您通过添加字符串来指定您希望邮件发送到哪个频道X-Mn-Key后跟频道名称。

备注

[1]

习惯上在邮件消息末尾附加一个签名.sig,通常包含有关作者的信息以及笑话或座右铭。它与邮件消息之间用包含“--” 后跟一个空格的行分隔。