Skip to main content

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.

上面的示例在美学上不令人愉悦,但完全合法。特别注意:

  1. "From:"字段中的注释 (包括一个将")"字符显示为quoted-pair的一部分)
  2. "To:"字段中冒号后缺少空格,以及组名后的注释和折叠空白,Chris Jones地址中注释中的特殊字符 ("."),以及"[email protected],"之前和之后的折叠空白
  3. "Cc:"字段中的多个嵌套注释以及"Cc"后紧跟":"的注释
  4. 日期字段中的折叠空白 (但除了末尾之外没有注释) 和时间中缺少秒数
  5. "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展示不应生成但必须解析的格式

学习要点

  1. 地址灵活性: 支持多种地址格式
  2. 消息线程: 使用Message-ID, In-Reply-To, References
  3. 重发机制: Resent-*字段保留原始信息
  4. 传输跟踪: Received字段记录传输路径
  5. 语法宽容性: 允许注释和折叠
  6. 向后兼容: 必须解析废弃格式

实现提示

  • 解析器测试: 使用这些示例测试解析器
  • 生成器验证: 确保不生成废弃格式
  • 边界情况: A.5展示了许多边界情况
  • 兼容性: A.6展示了必须支持的旧格式

下一节: Appendix B. Differences from Earlier Specifications (与早期规范的差异)

上一节: 7. References (参考文献)