vb.NET 如何以编程方式检测和解码编码为 base64 或其他格式的已接收 SMTP 电子邮件中的文本?



如何以编程方式检测和解码收到的SMTP电子邮件中的编码文本?

用户通过向我的人工智能在线系统发送一封包含用户短信的电子邮件来与我的人工智能在线系统进行通信。

如果没有编码,则我的 AI 成功解析来自用户的消息。

但某些电子邮件服务可能会对文本进行编码。 如何确定和解码编码的文本? 例如,MS Outlook将电子邮件英文文本编码为base64,我的系统会收到如下电子邮件:

<and the boiler plating just before the base64 encoding...>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: hotmail.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jul 2017 13:23:27.5314
(UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Internet
X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1NAM04HT166
Return-Path: douglaskbell@hotmail.com
X-OriginalArrivalTime: 14 Jul 2017 13:23:30.0507 (UTC) FILETIME=[6287D1B0:01D2FCA4]
FGFYUEHEGVWSCSDFXYHLDULIENGLIFUWVCKSJBDUFWKUEB..  <<<<<<<<<< base64 encoding

我想Content-Transfer-Encoding: base64标头是关键,但您可能最好使用 MIME 解析器,例如 MimeKit,它应该能够处理任何一种格式。

Dim smtp = "raw SMTP message"
Using ms = New MemoryStream(Encoding.UTF8.GetBytes(smtp))
Dim opt = New ParserOptions()
Dim msg = MimeMessage.Load(opt, ms, False)
Console.WriteLine(msg.TextBody)
End Using

请注意,我对 SMTP 了解不多,所以我不确定对整个消息使用 UTF8 是否正确(标头应该是 ASCII,但不确定正文(。Load方法还具有获取流的版本,因此根据您获取消息的方式,这可能会更好。

相关内容

最新更新