解析电子邮件主题标头

Posted

技术标签:

【中文标题】解析电子邮件主题标头【英文标题】:Parsing an email subject header 【发布时间】:2020-09-18 04:58:50 【问题描述】:

我正在使用 net/mail 使用 Go 阅读电子邮件:

msg, _ := mail.ReadMessage(f)
subject := msg.Header.Get("Subject")
fmt.Printf("Subject = %v", subject)

当主题包含特殊字符并且邮件提供商将其从纯文本转换为编码文本时,我无法弄清楚如何解码主题。

例如,如果发送一封带有“这是一个测试”的电子邮件——注意这是一个正确的大引号——那么该主题最终会被 UTF-8 编码,我认为是十六进制值:

=?UTF-8?Q?It=E2=80=99s_a_test?=

我的问题是:

    描述这里发生的编码的正确术语是什么?

    我会使用什么库将上面的字符串 (=?UTF-8?Q?It=E2=80=99s_a_test?=) 解码回 It’s a test,然后再执行我需要执行的操作(显示它、将其放入数据库等)

【问题讨论】:

您的问题与 Go 无关,但与处理电子邮件的 RFC 有很大关系。 (我已经删除了utf-8标签(并用mime替换它)因为主题的真正编码是所谓的“Q-encoding”(还有“B- encoding"); 格式的“UTF-8”位定义在从 Q 或 B 编码解码后应根据哪种编码来解释实际字节。) 【参考方案1】:

通过搜索 golang =?UTF-8?Q? 并查看 Go 的 mime 包中可用的功能找到答案

https://golang.org/pkg/mime/#WordDecoder.DecodeHeader

【讨论】:

以上是关于解析电子邮件主题标头的主要内容,如果未能解决你的问题,请参考以下文章

主题或消息中包含特殊字符的电子邮件的 PHP 邮件标头

解析类似电子邮件的标头(类似于 RFC822)

Python-解析电子邮件正文并截断 MIME 标头

解码 UTF8 电子邮件标头

解析通过 last Received: from header 发送 IP 的电子邮件

MIME 标头无法通过 Gmail API