Hi @Pham Tien Dung,
Thank you for posting to Microsoft Community. We are happy to help you.
To confirm with you, it seems like your issue is that you cannot use the Get-MessageTraceLog command with emails that user in onprem send to user in Exchange Online since the Get-MessageTrace you mentioned didn’t have the MessageSubject parameter.
If so, the reason why none result is returned with this command could be the command is available only in on-premises Exchange. For more information, you could refer to Get-MessageTrackingLog (ExchangePowerShell) | Microsoft Learn
However, you could also use Get-MessageTrace command to get the emails in Exchange Online with the command below to check the MessageID, Status and Subject etc.
Get-MessageTrace -SenderAddress mail@xyz -StartDate (Get-Date).AddHours(-48) -EndDate (Get-Date) | Format-table MessageTraceId, Subject, RecipientAddress,Status
You could refer to Get-MessageTrace (ExchangePowerShell) | Microsoft Learn for more information.
For reading status of email messages, no cmdlet within Exchange Online can do. Therefore, you cannot get the read status of a message by Get-MessageTrace. If you need the total numbers of read/unread messages for a period, you can find them in the Usage reports in the O365 Admin portal as below.
If you need those details on a per-message basis, you could refer EWS Powershell Script to find the ‘True’ Read Status of an email message | Microsoft Learn to get it from a EWS based script.
Hope it helps. If you have anything else to get help from me, please feel free to contact me.