The sample scripts below allows extracting mail logs from Office 365 Exchange.
NOTE: You need to have an existing O365 PSSession. To connect to an O365 PSSession, check my other article for Connecting to Exchange Online PS Session
Getting Mail Logs based on Sender Email Address
Param (
[Parameter(Mandatory=$True)]
[string]$senderEmailAddress,
[Parameter(Mandatory=$True)]
[string]$hours_to_track_back
)
$dateEnd = get-date
$dateStart = $dateEnd.AddHours($("-" + $hours_to_track_back))
$message = Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -SenderAddress $senderEmailAddress -Pagesize 5000 -Page 1 | Select-Object Received,SenderAddress,RecipientAddress,Subject,Status
echo ""
echo "===== ===== ===== ====== ====="
echo "Basis: SENDER -> $senderEmailAddress"
echo "Back tracking $hours_to_track_back hour(s) from present."
echo "... ..."
echo "Begin Mail Delivery Log"
echo ""
echo "Status,Received,RecipientAddress,Subject"
foreach($x in $message)
{$($($x.Status)+"`t"+$($x.Received)+"`t"+$($x.RecipientAddress)+"`t"+$($x.Subject))}
echo ""
echo "===== ===== END OF OUTPUT ====== ====="
Getting Mail Logs Based on Recipients
Param (
[Parameter(Mandatory=$True)]
[string]$RecipientAddress,
[Parameter(Mandatory=$True)]
[string]$hours_to_track_back
)
$dateEnd = get-date
$dateStart = $dateEnd.AddHours($("-" + $hours_to_track_back))
$message = Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -RecipientAddress $RecipientAddress -Pagesize 5000 -Page 1 | Select-Object Received,SenderAddress,RecipientAddress,Subject,Status
echo ""
echo "===== ===== ===== ====== ====="
echo "Basis: RECIPIENT -> $RecipientAddress"
echo "Back tracking $hours_to_track_back hour(s) from present."
echo "... ..."
echo "Begin Mail Delivery Log"
echo "... ..."
echo ""
echo "Status, Received,SenderAddress,Subject"
foreach($x in $message)
{ $($($x.Status)+"`t"+$($x.Received)+"`t"+$($x.SenderAddress)+"`t"+$($x.Subject))}
echo ""
echo "===== ===== END OF OUTPUT ====== ====="
Getting Mail Logs Based on Sender, Filter by Subject
Param (
[Parameter(Mandatory=$True)]
[string]$SenderAddress,
[Parameter(Mandatory=$True)]
[string]$Subject,
[Parameter(Mandatory=$True)]
[string]$hours_to_track_back
)
$dateEnd = get-date
$dateStart = $dateEnd.AddHours($("-" + $hours_to_track_back))
$message = Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -SenderAddress $SenderAddress -Pagesize 5000 -Page 1 | Select-Object Received,SenderAddress,RecipientAddress,Subject,Status
echo ""
echo "===== ===== ===== ====== ====="
echo "Basis: RECIPIENT -> $SenderAddress"
echo "Back tracking $hours_to_track_back hour(s) from present."
echo "... ..."
echo "Begin Mail Delivery Log"
echo "... ..."
echo ""
echo "Status, Received,RecipientAddress,Subject"
foreach($x in $message)
{ if($($x.Subject) -like "*$Subject*")
{ $($($x.Status)+"`t"+$($x.Received)+"`t"+$($x.RecipientAddress)+"`t"+$($x.Subject))}
}
echo ""
echo "===== ===== END OF OUTPUT ====== ====="