当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 创建过去 90 天的入站电子邮件流量报告

作者:精品下载站 日期:2024-12-14 04:11:56 浏览:13 分类:玩电脑

创建过去 90 天的入站电子邮件流量报告


历史搜索作业检索 10 天以上的消息跟踪数据

Facebook 群组中发布的看似简单的对话询问如何创建电子邮件流量报告,详细说明 Microsoft 365 租户在过去 90 天内收到的入站消息。报告应包含时间戳、发件人电子邮件地址以及邮件是否包含附件等信息。事实证明,对于这个请求不存在简单的解决方案。让我们探讨一下原因。

Exchange Online 仅将邮件跟踪数据保留在线十天。最多可以检索 90 天的邮件跟踪数据,但只能通过 Exchange 管理中心或 PowerShell 运行历史搜索来实现。

历史搜索意味着 Exchange Online 运行后台作业以从其邮件跟踪存储库检索数据。此过程可能需要十分钟到几个小时,具体取决于服务的当前负载。历史搜索最多可涵盖 100 个电子邮件地址的邮件数据,并最多返回 100,000 条记录。通常,人们搜索从邮箱(用户或共享)发送或接收的消息。本文介绍如何对从共享邮箱发送的电子邮件运行历史搜索。

为整个组织创建过去 90 天的报告可能意味着必须将处理分为多个作业,以确保为每个作业提交的地址数量为 100 或更少,并且该作业返回的记录少于 100,000 条。组织每天最多可以运行 250 次历史搜索。

创建历史搜索作业

任何解决方案都依赖于运行足够的历史搜索作业来检索搜索范围内所有 SMTP 地址的邮件跟踪数据。如果您想要为过去 90 天内的所有入站电子邮件创建报告,则需要查找外部人员可能使用的所有收件人地址,并将这些地址分为 100 个批次,然后提交进行处理。

例如,要检查所有邮箱,第一步是找到邮箱。如果存在超过 100 个,则将它们分成 100 个或更少的组。对于每个集合,提取其主 SMTP 地址并将其存储在数组中。例如,这些命令查找用户和共享邮箱并将每个邮箱的主 SMTP 地址存储在数组中:

[array]$Mailboxes = Get-ExoMailbox -RecipientTypeDetails UserMailbox, SharedMailbox -ResultSize Unlimited
[array]$RecipientAddresses = $Mailboxes.PrimarySMTPAddress

Exchange Online 支持启用邮件的对象的多个代理地址,这些对象可以使用任何 SMTP 代理地址接收电子邮件。如果要检查每个可能地址的入站消息,则必须提取每个对象的代理地址集并将所有地址存储在数组中。像这样的代码提取邮箱集的所有 SMTP 代理地址(使用上面的代码找到)并将它们存储在一个数组中:

[array]$MailboxProxyAddresses = $Mailboxes.EmailAddresses
[array]$MailboxAddresses = $Null
ForEach ($Address in $MailboxProxyAddresses) {
   If (($Address.Split(':')[0]) -in 'smtp', 'SMTP') {
      $SMTPAddress = $Address.SubString(5,$Address.Length-5)
      $MailboxAddresses += $SMTPAddress
   }
}

代理地址包括每个收件人为租户服务域获取的 MOERA(Microsoft 在线电子邮件路由地址)以及管理员分配给邮箱的任何附加地址。可以合理地预期代理地址的数量将是主 SMTP 地址数量的两到三倍。搜索所有 SMTP 代理地址而不是主 SMTP 地址会增加历史搜索作业的数量。

现在您知道要搜索哪些地址,您可以提交历史搜索作业来检索地址的数据。此代码提交历史搜索作业,以查找过去 90 天内 $RecipientAddresses 变量(数组)中所有地址的入站电子邮件。

[int]$i = 1
$StartDate = (Get-Date).AddDays(-90)
$ReportName = ("Historical Search from {0} Number {1} Submitted {2}" -f $StartDate, $i, (Get-Date -format g))

$Status = Start-HistoricalSearch -RecipientAddress $RecipientAddresses -StartDate $StartDate -EndDate (Get-Date) -ReportType MessageTrace -ReportTitle $ReportName -Direction Received -NotifyAddress [email protected]

您可以使用 Get-HistoricalSearch cmdlet 跟踪作业的进度:

Get-HistoricalSearch -JobId $Status.JobId | Format-Table JobId, Status, ReportTitle

JobId                                Status     ReportTitle
-----                                ------     -----------
3b9847c0-b1c2-4603-b344-3095b2d6c044 NotStarted Historical Search from 28/07/2023 21:44:51 Number 1 Submitted 26/10/20…

如果您在提交作业时添加通知地址,则当作业完成时,Exchange Online 会向该地址发送电子邮件。显然,您必须将可搜索地址集分成 100 个或更少的批次,并为每个批次提交历史搜索作业。

下载电子邮件流量报告的数据

最终,所有历史搜索作业都将完成,作业提取的消息跟踪数据也将准备就绪。您必须先从 Exchange 管理中心的“邮件跟踪”部分下载该数据,然后才能使用该数据。在“可下载报告”选项卡下,您将找到历史搜索作业的列表,并可以检查每个作业的详细信息(图 1)。当作业状态为“完成”时,会出现一个下载报告的选项。连接到 Azure 来获取数据可能需要一些时间,数据会下载为 Unicode 格式的 CSV 文件。

[玩转系统] 创建过去 90 天的入站电子邮件流量报告

作业完成时发送的通知消息还包括下载数据文件的链接(图 2)。

[玩转系统] 创建过去 90 天的入站电子邮件流量报告

根据历史邮件跟踪数据创建电子邮件流量报告

如果您必须将处理拆分为多个作业,则必须下载每个作业的文件。为了更方便地处理文件,我将它们移动到特定的文件夹。然后,任务是编写一个 PowerShell 脚本来循环遍历文件,从每个文件中提取消息跟踪数据,并将数据组合成一个数据集进行分析。

我编写的用于处理消息跟踪文件的脚本可从 GitHub 获取。处理完成后,包含从历史跟踪文件中提取的数据的 PowerShell 列表对象(称为 $Report)可供分析。最初的请求是创建一个报告,列出时间戳、发件人以及邮件是否有附件。邮件跟踪信息不包括电子邮件带有附件时的指示。可以假设任何字节大小超过 100,000 的消息都有附件,但考虑到电子邮件中嵌入图形的大小,这是一个很大的假设。

除了附件之外,该脚本还可以生成包含所请求信息的报告。图 3 显示了通过 Out-GridView cmdlet 传输的信息作为脚本输出的示例。

[玩转系统] 创建过去 90 天的入站电子邮件流量报告

关键是,一旦脚本生成了数据,就可以使用您认为最好的任何工具将其分割成您想要的任何内容。有些人会将数据导入 Power BI 以使用其可视化功能。其他人会很高兴使用简单的 PowerShell 命令来创建不同的统计数据。例如,这些命令对文件中的发件人电子邮件地址和发件人域进行分组,以报告最常见的发件人和发件人域:

$Report | Group-Object Sender -NoElement | Sort-Object Count -Descending | Select-Object -First 10 | Format-Table Name, count

$Report | Group-Object Sender_Domain -NoElement | Sort-Object Count -Descending | Select-Object -First 10 | Format-Table Name, count

Name                      Count
----                      -----
gmail.com                   730
microsoft.com               620
yandex.com                  508
practical365.com            272
linkedin.com                234
yahoo.com                   224
yammer.com                  205
lists.irishtimes.com        182
quest.com                   174
email.teams.microsoft.com   147

利用 PowerShell 的强大功能

在此过程中所证明的是,尽管 Microsoft 有限制,但仍可以检索和分析大量历史消息跟踪数据。所需要的只是计划。之后,PowerShell将提交历史消息跟踪作业并处理这些作业找到的信息。您如何处理结果取决于您。

为了强调 PowerShell 在处理消息跟踪数据时的有用性,这里还有一些其他文章可供阅读。

  • 如何运行在线消息跟踪。
  • 如何运行历史消息跟踪。
  • 使用消息跟踪数据来找出用户发送模式。
  • 使用邮件跟踪数据报告发送给外部收件人的电子邮件。
  • 查找从特定域传递到租户中收件人的邮件。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯