使用带有 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;-]*
但是你需要在你的特定环境中验证。
请评论,如果这需要调整/进一步的细节。
我一直在尝试 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;-]*
但是你需要在你的特定环境中验证。
请评论,如果这需要调整/进一步的细节。