使用带有 OfficeJS 的 Outlook Add-in 从电子邮件 header 中提取 Authentication-Results 部分

Extract from an email header the Authentication-Results part using an Outlook Add-in with OfficeJS

我一直在尝试 Authentication-Results 的部分 首先我尝试了:

Office.context.mailbox.item.internetHeaders.getAsync

但出于某种原因,interneHeader 不断返回未定义的信息,所以我转到:

Office.context.mailbox.item.getAllInternetHeadersAsync

在我使用 Regex 进行的测试中,我从它的第一行得到了结果。

但是当我使用它在 regex101 或 Node 上复制电子邮件 headers 时,我得到了我需要的信息。表示包含 spf、dkim 和 dmarc 的整个部分。

我使用这个正则表达式:

header.match(/^Authentication-Results:[0-9a-zA-Z =\(\)\.\n;-]*$/gm)[0]

例子: 这是来自 Steam 电子邮件的 header 示例:

Received: from SN1NAM02FT0054.eop-nam02.prod.protection.outlook.com
 (2603:10b6:806:127:cafe::f5) by SN7PR04CA0211.outlook.office365.com
 (2603:10b6:806:127::6) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.15 via Frontend
 Transport; Tue, 1 Feb 2022 20:13:03 +0000
Authentication-Results: spf=pass (sender IP is xxx.xxx.xxx.xxx)
 smtp.mailfrom=steampowered.com; dkim=pass (signature was verified)
 header.d=steampowered.com;dmarc=pass action=none
 header.from=steampowered.com;compauth=pass reason=100
Received-SPF: Pass (protection.outlook.com: domain of steampowered.com
 designates xxx.xxx.xxx.xxx as permitted sender)
 receiver=protection.outlook.com; client-ip=xxx.xxx.xxx.xxx;
 helo=smtp-03-tuk1.steampowered.com;

使用我的正则表达式,就可以了 returns 这个:

Authentication-Results: spf=pass (sender IP is xxx.xxx.xxx.xxx)
 smtp.mailfrom=steampowered.com; dkim=pass (signature was verified)
 header.d=steampowered.com;dmarc=pass action=none
 header.from=steampowered.com;compauth=pass reason=100

但是当我使用 Office.context.mailbox.item.getAllInternetHeadersAsync 它只有returns这个:

Authentication-Results: spf=pass (sender IP is xxx.xxx.xxx.xxx)

所以我想知道我可以用什么方法来解决这个问题?

基本上,您的操作系统定义了行尾的字符/字符序列。您的特定应用程序可能遵循也可能不遵循。

如果您想限制对初始正则表达式的更改,添加 \r 是(对我而言)最直接的方法。如果你想限制你的正则表达式中的字符数,你可以选择 \s - 这将包含空白,\n\r - 但也包括 \t,目前不允许这样做。

谈论潜在的简化:在字符 class 内(方括号之间),通常不需要转义 brackets/parentheses 和点/句号 - 留下
^Authentication-Results:[0-9a-zA-Z =().\n\r;-]*
但是你需要在你的特定环境中验证。

请评论,如果这需要调整/进一步的细节。