我需要用 C++ 编写一些东西来发送符合 RFC-2822 标准的电子邮件。
但我不太确定的一件事是引用的字符串及其转义机制。官方文档让我很困惑。
https://datatracker.ietf.org/doc/html/rfc2822#section-3.2.4 https://datatracker.ietf.org/doc/html/rfc2822#section-3.2.5
特别是以下概念/问题:
什么是原子?
看起来下面4行是OR条件,%dxx是ASCII码和“;”后面的字 是解释/备注。如果是这种情况,则 %d33 + %d35-91 + %d93-126 已经定义了引用字符串中允许的字符范围而无需转义。为什么我们仍然需要第一行“NO-WS-CTL / ; Non white space controls”?另外,对于第二行,“%d33 / ; US-ASCII 的其余部分”,%d33 已经定义了单个字符,为什么它仍然提到“US-ASCII 的其余部分”?
qtext = NO-WS-CTL / ; Non white space controls %d33 / ; The rest of the US-ASCII %d35-91 / ; characters not including "\" %d93-126 ; or the quote character
什么是“引用对”?
qcontent = qtext / quoted-pair
如何解释这个定义?
quoted-string = [CFWS] DQUOTE *([FWS] qcontent) [FWS] DQUOTE [CFWS]
我找不到文档中明确提到的任何转义序列。该标准是否没有转义序列,并且 qtext 中未定义的字符根本不允许?
如果真的有转义机制,它是什么,是否有任何库可用于将普通字符串解析为 RFC2822 引用的字符串
文档的格式让我很困惑,有没有更好的文档建议?
抱歉,我有这么多问题,感谢您的帮助。