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

时间:2015-03-24 14:03:39

标签: delphi c++builder indy email-address

我在电子邮件地址遇到过一些带有编码字的电子邮件,例如:而不是

abc <abc@example.com>

它包含:

abc <=?ISO8859-1?B?YWJjQGV4YW1wbGUuY29t=?=>

我发现许多电子邮件程序都存在问题,但有些问题让我觉得它可能是某些RFC的一部分,尽管我找不到它。

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

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

它将由许多程序解码,但不会由Indy解码。在大多数程序中发生的事情是,他们认为这部分名称来自于&#34;名称&#34;部分和解码它,但他们留下编码的电子邮件地址,导致:

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

这使得它至少部分解码得很好。

然而,在Indy中,这导致:

Name = **blank** Email = =?ISO8859-1?B?YWJjQGV4YW1wbGUuY29t=?=

这应该在Indy中得到支持(或者反过来因此它将base64部分视为&#34;名称&#34;部分,而不是&#34;电子邮件&#34;部分)或者它是不正确格式的电子邮件地址?或者是解释的问题应该被解释为第一部分,因为电子邮件确实看起来像From: abc@example.com而没有<>个字符。

1 个答案:

答案 0 :(得分:3)

  

abc&lt; =?ISO8859-1?B?YWJjQGV4YW1wbGUuY29t =?=&gt;

Indy不支持这样的编码地址,符合RFC 2047 Section 5 Use of encoded-words in message headers

  

编码字&#39;可能会根据以下规则出现在邮件标题或正文部分标题中:

     

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

     

普通ASCII文本和&#39;编码字可以一起出现在同一个标​​题字段中。但是,一个&#39;编码字&#39;出现在标题字段中,定义为&#39; * text&#39;必须与任何相邻的编码字分开。或者&#39; text&#39;通过线性白色空间&#39;。

     

(2)编码字&#39;可能出现在评论中由&#34;(&#34;和&#34;)&#34;分隔,即在任何地方&#39; ctext&#39;被允许。更准确地说,RFC 822 ABNF定义为&#39;评论&#39;修改如下:

     

评论=&#34;(&#34; *(ctext / quoted-pair / comment / encoded-word)&#34;)&#34;

     

A&#34; Q&#34; - 编码&#39;编码字&#39;出现在“评论”中不得包含字符&#34;(&#34;,&#34;)&#34;或&#34; &#39;编码字&#39;出现在评论中的#39;必须与任何相邻的编码字分开。或者&#39; ctext&#39;通过线性白色空间&#39;。

     

重要的是要注意,评论仅在内部识别&#34;结构化&#34;野外机构。在其主体被定义为&#39; * text&#39;,&#34;(&#34;和&#34;)&#34;被视为普通字符而不是注释分隔符,本节规则(1)适用。 (参见RFC 822,第3.1.2和3.1.3节)

     

(3)取代“&#39;字”&#39;短语中的实体,例如,在“发件人”,“收件人”或“抄送”标题中的地址之前的实体。 ABNF定义的短语&#39;从RFC 822变成:

     

词组= 1 *(编码词/词)

     

在这种情况下,可以在&#34; Q&#34; - 编码&#39;编码字&#39;中使用的字符集。仅限于:。一个&#39;编码字&#39;出现在短语中的短语&#39;必须与任何相邻的单词&#39;,&#39; text&#39;或者&#39;特别&#39;通过线性白色空间&#39;。

     

这些是“编码字”的唯一位置。可能会出现。特别是:

     
      
  • 一个&#39;编码字&#39;不得出现在“地址规范”

    的任何部分。

  •   
  • 编码字&#39;不得出现在&#39;引用字符串&#39;。

  • 中   
  • 编码字&#39;不得在收到的标题字段中使用。

  •   
  • 编码字&#39;绝不能用在MIME的参数中    Content-Type或Content-Disposition字段,或任何结构化字段    除了评论之外的字段正文或者&#39;短语&#39;。

  •   

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

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

来自:=?ISO8859-1?B?YWJjQGV4YW1wbGUuY29t =?=

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