Appendix A. Example Messages (示例消息)
本节展示了一系列消息示例。这些示例旨在帮助实现本规范,但不应被视为规范性的; 也就是说,尽管本节中的示例经过仔细审查,但如果这些示例与本文档第3节和第4节中描述的语法之间碰巧存在冲突,则应以这些节中的语法为准。
在本文档的文本版本中,本节中的消息由"----"行分隔。"----"行不是消息本身的一部分。
A.1. Addressing Examples (地址示例)
以下是可能在两个人之间发送的消息示例。
A.1.1. Simple Addressing (简单地址)
这可以称为规范消息。它有一个作者John Doe,一个收件人Mary Smith,一个主题,日期,消息标识符和正文中的文本消息。
From: John Doe <[email protected]>
To: Mary Smith <[email protected]>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <[email protected]>
This is a message just to say hello.
So, "Hello".
如果John的秘书Michael实际发送了消息,即使John是作者并且对此消息的回复应该返回给他,也会使用sender字段:
From: John Doe <[email protected]>
Sender: Michael Jones <[email protected]>
To: Mary Smith <[email protected]>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <[email protected]>
This is a message just to say hello.
So, "Hello".
A.1.2. Different Types of Mailboxes (不同类型的邮箱)
此消息在目的地字段中包含多个地址,并且还使用几种不同形式的地址。
From: "Joe Q. Public" <[email protected]>
To: Mary Smith <[email protected]>, [email protected], Who? <[email protected]>
Cc: <[email protected]>, "Giant; \"Big\" Box" <[email protected]>
Date: Tue, 1 Jul 2003 10:52:37 +0200
Message-ID: <[email protected]>
Hi everyone.
说明:
- Joe Q. Public和Giant; "Big" Box的显示名需要用双引号括起来,因为前者包含句点,后者同时包含分号和双引号字符 (双引号字符显示为quoted-pair结构)
- Who?的显示名可以不带引号出现,因为问号在atom中是合法的
[email protected]和[email protected]根本没有关联的显示名[email protected]使用不带尖括号的更简单的地址形式
A.1.3. Group Addresses (组地址)
From: Pete <[email protected]>
To: A Group:Ed Jones <[email protected]>,[email protected],John <[email protected]>;
Cc: Undisclosed recipients:;
Date: Thu, 13 Feb 1969 23:32:54 -0330
Message-ID: <[email protected]>
Testing.
在此消息中,"To:"字段有一个名为"A Group"的单个组收件人,其中包含3个地址,而"Cc:"字段有一个名为Undisclosed recipients的空组收件人。
A.2. Reply Messages (回复消息)
以下是构成John和Mary之间对话线程的三个消息系列。John首先向Mary发送消息,然后Mary回复John的消息,然后John回复Mary的回复消息。
特别注意每个消息中的"Message-ID:"、"References:"和"In-Reply-To:"字段。
原始消息:
From: John Doe <[email protected]>
To: Mary Smith <[email protected]>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <[email protected]>
This is a message just to say hello.
So, "Hello".
Mary的回复:
发送回复时,Subject字段通常被保留,尽管如第3.6.5节所述以"Re: "开头。
From: Mary Smith <[email protected]>
To: John Doe <[email protected]>
Reply-To: "Mary Smith: Personal Account" <[email protected]>
Subject: Re: Saying Hello
Date: Fri, 21 Nov 1997 10:01:10 -0600
Message-ID: <[email protected]>
In-Reply-To: <[email protected]>
References: <[email protected]>
This is a reply to your hello.
注意上述消息中的"Reply-To:"字段。当John回复Mary的上述消息时,回复应该发送到"Reply-To:"字段中的地址而不是"From:"字段中的地址。
John的回复:
To: "Mary Smith: Personal Account" <[email protected]>
From: John Doe <[email protected]>
Subject: Re: Saying Hello
Date: Fri, 21 Nov 1997 11:00:00 -0600
Message-ID: <[email protected]>
In-Reply-To: <[email protected]>
References: <[email protected]> <[email protected]>
This is a reply to your reply.
A.3. Resent Messages (重发消息)
从已多次用作示例的消息开始:
From: John Doe <[email protected]>
To: Mary Smith <[email protected]>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <[email protected]>
This is a message just to say hello.
So, "Hello".
假设Mary在收到此消息后,希望向Jane发送消息的副本,以便 (a) 消息看起来像是直接来自John; (b) 如果Jane回复消息,回复应该返回给John; 以及 (c) 保留所有原始信息,例如消息最初发送给Mary的日期、消息标识符和原始收件人。在这种情况下,resent字段被前置到消息:
Resent-From: Mary Smith <[email protected]>
Resent-To: Jane Brown <[email protected]>
Resent-Date: Mon, 24 Nov 1997 14:22:01 -0800
Resent-Message-ID: <[email protected]>
From: John Doe <[email protected]>
To: Mary Smith <[email protected]>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <[email protected]>
This is a message just to say hello.
So, "Hello".
如果Jane反过来希望将此消息重新发送给另一个人,她将在上述内容前面添加她自己的一组resent头部字段并发送。(请注意,为了简洁起见,未显示跟踪字段。)
A.4. Messages with Trace Fields (带跟踪字段的消息)
当消息通过 [RFC5321] 中描述的传输系统发送时,跟踪字段被前置到消息。以下是这些跟踪字段可能的外观示例。请注意,第一个字段中有一些折叠空白,因为这些行可能很长。
Received: from x.y.test
by example.net
via TCP
with ESMTP
id ABC12345
for <[email protected]>; 21 Nov 1997 10:05:43 -0600
Received: from node.example by x.y.test; 21 Nov 1997 10:01:22 -0600
From: John Doe <[email protected]>
To: Mary Smith <[email protected]>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <[email protected]>
This is a message just to say hello.
So, "Hello".
A.5. White Space, Comments, and Other Oddities (空白、注释和其他特殊情况)
空白 (包括折叠空白) 和注释可以插入字段的许多标记之间。以A.1.3为例,可以在所有字段中插入空白和注释。
From: Pete(A nice \) chap) <pete(his account)@silly.test(his host)>
To:A Group(Some people)
:Chris Jones <c@(Chris's host.)public.example>,
[email protected],
John <[email protected]> (my dear friend); (the end of the group)
Cc:(Empty list)(start)Hidden recipients :(nobody(that I know)) ;
Date: Thu,
13
Feb
1969
23:32
-0330 (Newfoundland Time)
Message-ID: <[email protected]>
Testing.
上面的示例在美学上不令人愉悦,但完全合法。特别注意:
- "From:"字段中的注释 (包括一个将")"字符显示为quoted-pair的一部分)
- "To:"字段中冒号后缺少空格,以及组名后的注释和折叠空白,Chris Jones地址中注释中的特殊字符 ("."),以及"
[email protected],"之前和之后的折叠空白 - "Cc:"字段中的多个嵌套注释以及"Cc"后紧跟":"的注释
- 日期字段中的折叠空白 (但除了末尾之外没有注释) 和时间中缺少秒数
- "Message-ID:"字段中标识符之前 (但不是内部) 的空白
A.6. Obsoleted Forms (废弃形式)
以下是本文档第4节中描述的废弃 (即,"MUST NOT generate") 语法元素的示例。
A.6.1. Obsolete Addressing (废弃的地址)
注意下面示例中Joe Q. Public周围缺少引号,Mary Smith地址中出现的路由,出现在"To:"字段中的两个逗号,以及jdoe地址中"."周围出现的空格。
From: Joe Q. Public <[email protected]>
To: Mary Smith <@node.test:[email protected]>, , jdoe@test . example
Date: Tue, 1 Jul 2003 10:52:37 +0200
Message-ID: <[email protected]>
Hi everyone.
A.6.2. Obsolete Dates (废弃的日期)
以下消息使用废弃的日期格式,包括非数字时区和两位数年份。请注意,尽管缺少day-of-week,但这不是废弃语法特有的; 它在当前语法中也是可选的。
From: John Doe <[email protected]>
To: Mary Smith <[email protected]>
Subject: Saying Hello
Date: 21 Nov 97 09:55:06 GMT
Message-ID: <[email protected]>
This is a message just to say hello.
So, "Hello".
A.6.3. Obsolete White Space and Comments (废弃的空白和注释)
空白和注释可以出现在比当前语法更多的元素之间。此外,完全由空白组成的折叠行是合法的。
From : John Doe <jdoe@machine(comment). example>
To : Mary Smith
<[email protected]>
Subject : Saying Hello
Date : Fri, 21 Nov 1997 09(comment): 55 : 06 -0600
Message-ID : <1234 @ local(blah) .machine .example>
This is a message just to say hello.
So, "Hello".
特别注意"To:"字段的第二行。它以两个空格字符开始。因此,它被视为折叠的一部分,如第4.2节所述。此外,整个地址、日期和消息标识符中的注释和空白都是废弃语法的一部分。
附录A总结
示例类别
| 类别 | 示例 | 目的 |
|---|---|---|
| 简单地址 | A.1.1-A.1.3 | 展示基本地址格式 |
| 回复 | A.2 | 展示消息线程 |
| 重发 | A.3 | 展示Resent字段 |
| 跟踪 | A.4 | 展示Received字段 |
| 特殊情况 | A.5 | 展示注释和折叠 |
| 废弃格式 | A.6 | 展示不应生成但必须解析的格式 |
学习要点
- 地址灵活性: 支持多种地址格式
- 消息线程: 使用Message-ID, In-Reply-To, References
- 重发机制: Resent-*字段保留原始信息
- 传输跟踪: Received字段记录传输路径
- 语法宽容性: 允许注释和折叠
- 向后兼容: 必须解析废弃格式
实现提示
- 解析器测试: 使用这些示例测试解析器
- 生成器验证: 确保不生成废弃格式
- 边界情况: A.5展示了许多边界情况
- 兼容性: A.6展示了必须支持的旧格式
下一节: Appendix B. Differences from Earlier Specifications (与早期规范的差异)
上一节: 7. References (参考文献)