gpt4 book ai didi

php - 电子邮件标题中的特殊字符是什么以及何时使用引号?

转载 作者:可可西里 更新时间:2023-11-01 00:48:42 26 4
gpt4 key购买 nike

我正在尝试使用 PHP 发送和阅读电子邮件。到目前为止,我发现我必须使用函数 mb_encode_mimeheader() 对特殊字符进行编码, 但我不必对空格进行编码。

我还发现,地址归档中的括号不起作用:( Is there an error in PHP's imap_fetch_overview()-function when reading headers with brackets? )。例如 PHP 无法使用 header 部分 From: Admin [] <user@mail.tld> , 但可以阅读标题部分 From: "Admin []" <user@mail.tld> .

因此,显然括号在邮件 header 中具有特殊含义(至少对于 PHP 而言)。 Mailheader 中的特殊字符有哪些它们的含义是什么它们需要在哪里编码/引用?

例如,PHP 在主题中使用括号没有问题,尽管主题也是标题的一部分。

引号似乎可以帮助我解决问题(https://www.rfc-editor.org/rfc/rfc5322#section-3.2.4 - 我仍然不能 100% 确定这是 PHP 问题还是邮件头不正确)。 但是如何使用引号,引号转义了什么?

https://www.rfc-editor.org/rfc/rfc5322#section-3.2.4它说:

Strings of characters that include characters other than thoseallowed in atoms can be represented in a quoted string format, wherethe characters are surrounded by quote (DQUOTE, ASCII value 34)characters.

那么,我现在应该自己“转义/引用”每个字符

From: Admin "[""]" <user@mail.tld>

还是将所有内容一起引用可以吗?

From: "Admin []" <user@mail.tld>

但是,如果其他控制序列包含在引号中会发生什么?例如我有特殊字符 ÄÖÜ在我的字符串中,编码为 =?UTF-8?B?w4PChMODwpbDg8Kc?= . 那么,根据 RFC,'quoted AND encoded' 字符串仍然可以吗?

From: "Admin [=?UTF-8?B?w4PChMODwpbDg8Kc?=]" <user@mail.tld>

最佳答案

如果您有 RFC2047,您不妨将整个 header 编码为 RFC2047 而忘记引用。

显然您已经找到了 RFC5322,它是关于需要引用的内容和原因的权威来源。基本上,如果不是电子邮件地址的一部分,则任何具有电子邮件地址含义的内容都需要引用。传统的引用机制是反斜杠和/或双引号,但使用 MIME,您可以使用可用的 MIME 编码轻松地透明地对所有内容进行编码。

您提供的链接解释了“原子”中不允许使用的字符需要引号。原子中允许的字符列表在上一节中。

ALPHA / DIGIT /    ; Printable US-ASCII
"!" / "#" / ; characters not including
"$" / "%" / ; specials. Used for atoms.
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"

如果你对照 ASCII 表进行交叉检查,你会得到

32   (space)                    not OK
33 ! OK
34 " not OK
35 # through $%& 38 OK
39 ' through () 41 not OK
42 * through + 43 OK
44 , not OK
45 - OK
46 . not OK
47 / through 0123456789 57 OK
58 : through ;< 60 not OK
61 = OK
62 > not OK
63 ? OK
64 @ not OK
65 A through BCD...XYZ 90 OK
91 [ through \] 93 not OK
94 ^ through _ 95 OK
96 ` not OK
97 a through bcd...xyz{|}~ 126 OK
127 DEL not OK

在某些情况下,允许不加引号的集合“点原子”,即上述加点(句点、句点、ASCII 46)。

有些客户显然过于谨慎(有些客户会简单地将所有内容放在双引号中,就好像您的真实姓名不是您的真实姓名一样。这很糟糕)。

我的理解是,在允许原子的情况下允许使用 RFC2047 序列,但这意味着它不能与另一个原子相邻。无论如何,我会逃避并建议不要尝试将引用和 RFC2047 包装混合在同一个标​​头中,而不是可能弄清楚它们是如何相互作用的(然后可能会发现您的解释不是镇上唯一的游戏,要么是因为其他人做了弄清楚时出错,或者因为对规范有多种有效解释)。

关于php - 电子邮件标题中的特殊字符是什么以及何时使用引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com