Delphi Indy10-电子邮件地址中的编码字

Delphi Indy10-电子邮件地址中的编码字,delphi,c++builder,indy,email-address,Delphi,C++builder,Indy,Email Address,我遇到过一些电子邮件地址中带有编码单词的电子邮件,例如,而不是 abc 它包括: abc 我看到很多电子邮件程序都有问题,但也有一些没有,这让我觉得它可能是某些RFC的一部分,尽管我找不到它 此外,如果电子邮件地址标题的格式为: From:=?ISO8859-1?B?YWJJQGV4YW1WBGUY29T=?= 它将被许多程序解码,但不会被印地公司解码。在大多数程序中发生的是,他们把A部分从“名称”部分考虑,并将其解码,但他们留下电子邮件地址编码,导致: Name=abc@example.com

我遇到过一些电子邮件地址中带有编码单词的电子邮件,例如,而不是

abc

它包括:

abc

我看到很多电子邮件程序都有问题,但也有一些没有,这让我觉得它可能是某些RFC的一部分,尽管我找不到它

此外,如果电子邮件地址标题的格式为:

From:=?ISO8859-1?B?YWJJQGV4YW1WBGUY29T=?=

它将被许多程序解码,但不会被印地公司解码。在大多数程序中发生的是,他们把A部分从“名称”部分考虑,并将其解码,但他们留下电子邮件地址编码,导致:

Name=abc@example.com
Email==?ISO8859-1?B?YWJJQGV4YW1WBGUY29T=?=

这使得它至少部分解码良好

然而,在印地,这导致:

Name=**空白**
Email==?ISO8859-1?B?YWJJQGV4YW1WBGUY29T=?=

Indy是否支持这一点(或者将base64部分视为“名称”部分,而不是“电子邮件”部分),或者这是一个格式不正确的电子邮件地址?或者,这是一个解释的问题,应该将什么解释为电子邮件的第一部分,因为电子邮件实际上可能看起来像来自:abc@example.com不带
字符

abc

Indy不支持此类编码地址,根据:

根据以下规则,“编码字”可能出现在消息头或正文部分头中:

(1) “编码字”可以替换任何主题或注释标题字段、任何扩展消息标题字段或任何MIME正文部分字段中的“文本”标记(由RFC 822定义),字段正文被定义为“*text”。“编码字”也可能出现在任何用户定义的(“X-”)消息或正文部分标题字段中

普通ASCII文本和“编码字”可能同时出现在同一标题字段中。但是,出现在定义为“*文本”的标题字段中的“编码字”必须通过“线性空白”与任何相邻的“编码字”或“文本”隔开

(2) “编码字”可能出现在以“(“and”)分隔的“注释”中,即允许使用“ctext”的地方。更准确地说,RFC 822 ABNF对“评论”的定义修改如下:

comment=“(“*(ctext/quoted pair/comment/encoded word)”)

“注释”中出现的“Q”编码的“编码字”不得包含“注释”中出现的“(“,”)或““编码字”字符,必须用“线性空白”将其与任何相邻的“编码字”或“ctext”分隔开

需要注意的是,“注释”仅在“结构化”字段正文中识别。在正文定义为“*文本”的字段中,“和”被视为普通字符,而不是注释分隔符,本节规则(1)适用。(参见RFC 822,第3.1.2节和第3.1.3节)

(3) 作为“短语”中“单词”实体的替换,例如,在From、To或Cc头中位于地址之前的实体。RFC 822中“短语”的ABNF定义因此变为:

短语=1*(编码字/字)

在这种情况下,“Q”编码的“编码字”中可能使用的字符集限制为:。出现在“短语”中的“编码字”必须通过“线性空白”与任何相邻的“字”、“文本”或“特殊”隔开

这些是唯一可能出现“编码字”的位置。尤其是:

  • 一个“编码字”不能出现在“地址规范”的任何部分中。

  • “编码字”不得出现在“带引号的字符串”中

  • “编码字”不得用于接收的标头字段中

  • MIME的参数中不得使用“编码字” 内容类型或内容处置字段,或在任何结构化 字段正文,但“注释”或“短语”中的除外

Indy(和RFC 2047)确实支持编码名称,但:

From: =?ISO8859-1?B?YWJj?= <abc@example.com>
From:=?ISO8859-1?B?YWJj?=
发件人:=?ISO8859-1?B?YWJJQGV4YW1WBGUY29T==


在这种情况下,Indy将其解释为没有名称的电子邮件地址。如上所述,不允许使用编码地址。

看起来像base64编码。@Craig当然是base64,但问题在于电子邮件地址是编码的东西,而不是“发件人”名称“部分。您使用的是indy10的哪种版本?”?我也有这个问题,但我相信它在最近的版本中已经得到了修复。描述该格式的文档是。是否有拒绝投票的原因?因此,允许使用上述编码的电子邮件地址(在
中)?@在电子邮件地址中使用非ASCII字符取决于协议。例如,如果SMTP客户端和服务器支持SMTPUTF8扩展(Indy尚未支持),或者如果电子邮件使用
message/global
MIME类型完全以UTF-8(标题和正文)编码,则电子邮件地址可以用UTF-8编码。