בדיקת מצב קריאה (לא נקראה) של הודעות דואר אלקטרוני ב- Exchange


יש לי מקרה לאחרונה: "האם אנו יכולים לבדוק מצב דואר אלקטרוני (קריאה/לא נקראה) בין אם אישור הקריאה זמין או לא זמין ב- Outlook, או אם משתמש בדק את אישור הקריאה? " במאמר זה, נדבר על אופן המעקב אחר מצב קריאת דואר אלקטרוני ב- Exchange Server מקומי וכמה מילים אודות תכונה זו ב- Exchange Online (Microsoft 365).

מדוע ייתכן שתצטרך לקבל את סטטוס קריאת הדוא"ל?

  • אם הודעת דוא"ל היא קריטית ואתה רוצה לוודא שכל עובד קרא אותה;

  • חברות רבות משתמשות בדיוור ניוזלטר (כמו חדשות/ימי הולדת/מסמכים) ואתה רוצה לקבל נתונים סטטיסטיים על מידת היעילות של דיוור כזה.

האם ניתן לקבל מצב קריאה של דואר אלקטרוני בתיבת דואר של Exchange בין אם שולח ביקש אישור קריאה?

מעקב אחר מצב קריאה של הודעת דואר אלקטרוני ב- Exchange Server

בוא נראה כיצד לקבל מצב קריאה של הודעת דואר אלקטרוני בתיבת דואר של Exchange Server. ראשית, ודא שמעקב אחר קריאת דואר אלקטרוני זמין בארגון Exchange שלך:

Get-OrganizationConfig | Select ReadTrackingEnabled
True

— מופעל,

false

— נכה.

הפעל את מעקב קריאת הדואר האלקטרוני באמצעות הפקודה:

Set-OrganizationConfig -ReadTrackingEnabled $true

רק לאחר הפעלת הפקודה, נתוני מעקב קריאה מופיעים ביומני הרישום של Exchange Server.

באפשרותך להשבית מעקב אחר מצב קריאה עבור תיבות דואר ספציפיות (כגון תיבות דואר משותפות) באמצעות הפקודה הבאה:

Set-Mailbox support@a-d.site -MessageTrackingReadStatusEnabled $false

לאחר מכן עליך לקבל מזהה הודעה באמצעות cmdlet Get-MessageTrackingLog:

Get-MessageTrackingLog -Sender support@a-d.site -MessageSubject "youremail subject" -Start (Get-Date).AddHours(-48) -EventId RECEIVE | Select MessageID

בדוגמה שלנו, הודעת דוא"ל משולח זה עם נושא ספציפי נשלחה מספר פעמים במהלך 48 השעות האחרונות. באפשרותך להחיל מסננים שונים כדי לקבל מזהה הודעה מדויק.
עם זאת, באפשרותך להקל עליך: פתח את הדואר האלקטרוני ב- Outlook, לחץ על קובץ — מאפיינים ומצא את מזהה ההודעה במקטע כותרות אינטרנט.

לאחר מכן פתח את מעטפת ניהול Exchange והפעל את Get-MessageReadStatusReport.ps1 (קוד ה-script מוצג להלן). ציין שם תיבת דואר ומזהה הודעה.

לכן, אתה מקבל קובץ CSV עם מצבי קריאה עבור ההודעה בכל תיבות הדואר של המשתמש. לאחר מסירת דואר אלקטרוני לתיבת הדואר, שני מצבים אפשריים:

  • קרא -

    The message is marked as Read in the user’s mailbox
  • לא נקרא -

    The message is marked as Unread in the user’s mailbox

הנה קובץ script Get-MessageReadStatusReport.ps1:

[CmdletBinding()]
param (
[Parameter( Mandatory=$true)]
[string]$Mailbox,
[Parameter( Mandatory=$true)]
[string]$MessageId
)
$output = @()
#Checking Exchange organization read tracking state
if (!(Get-OrganizationConfig).ReadTrackingEnabled) {
throw "Email tracking status is disabled"
}
#Getting an email ID
$msg = Search-MessageTrackingReport -Identity $Mailbox -BypassDelegateChecking -MessageId $MessageId
#There should be one message
if ($msg.count -ne 1) {
throw "$($msg).count emails found with this ID"
}
#Getting a report
$report = Get-MessageTrackingReport -Identity $msg.MessageTrackingReportId -BypassDelegateChecking
#Getting events
$recipienttrackingevents = @($report | Select -ExpandProperty RecipientTrackingEvents)
#Generating a list of recipients
$recipients = $recipienttrackingevents | select recipientaddress
#Getting an email status for each recipient
foreach ($recipient in $recipients) {
$events = Get-MessageTrackingReport -Identity $msg.MessageTrackingReportId -BypassDelegateChecking `
-RecipientPathFilter $recipient.RecipientAddress -ReportTemplate RecipientPath
$outputline = $events.RecipientTrackingEvents[-1] | Select RecipientAddress,Status,EventDescription
$output += $outputline
}
$output
$directory = "C:\PS\ExchangeReports"
$filename = 'ReadStatusReport'
$file = "$filename.csv"
#Exporting the report to CSV
$output | Export-Csv -NoTypeInformation -Append -Path "$directory\$file"

באפשרותך להוריד קובץ script זה של PowerShell ממאגר GitHub שלי: https://github.com/maxbakhub/winposh/blob/main/Exchange/Get-MessageReadStatusReport.ps1

כיצד לבדוק אם משתמש קרא דואר אלקטרוני ב- Exchange Online (Microsoft 365)?

ניסיתי לשנות מעט קובץ script זה של PowerShell כדי לקבל מצב קריאת הודעה בתיבות דואר של משתמשים ב- Exchange Online.

לאחר שהתחברתי לדייר Microsoft 365 שלי באמצעות מודול Exchange Online PowerShell, בדקתי אם מעקב אחר מצב קריאת דואר אלקטרוני זמין ב- Exchange Online. כברירת מחדל, messageTrackingReadStatusEnabled הפך לזמין עבור כל תיבות הדואר בדייר.

Get-EXOMailbox -Properties messageTrackingReadStatusEnabled|select UserPrincipalName,messageTrackingReadStatusEnabled

ערכתי את התסריט, שכן

Get-MessageTrace

ו

Get-MessageTraceDetail

רכיבי cmdlet משמשים למעקב אחר הודעות ב- Exchange Online במקום Get-MessageTrackingLog ו- Search-MessageTrackingReport. למרבה הצער, Get-MessageTraceDetail ב- Exchange Online לא איפשר לי לקבל מצב הודעה. Microsoft עשויה לשפר את התכונות של cmdlet Get-MessageTraceDetail לאלה של on-prem Search-MessageTrackingReport בעתיד, אבל עכשיו זה לא עובד.

לכן, הדרך היחידה להציג את מצב קריאת ההודעה בתיבת דואר של Exchange Online היא Microsoft Graph API. עליך לבדוק את המאפיין isRead של הודעת הדוא"ל (https://docs.microsoft.com/en-us/graph/api/message-get?view=graph-rest-1.0&tabs=http).