Hello,
yes, you are right, the ReceivedDate is added into the Received header by the receiving server. Technically it is possible for the ReceivedDate property of the MailMessage class to be null. For a real email received by a server, that would be in the case when the date in the Received headers is in a strange format which we would not be able to parse.
In fact I was able to prepare a message which has no ReceivedDate and no senders and recipients at all (in Outlook I created a draft new empty email and saved it as a MSG file).
The email after loading into MailMessage has From, To, CC and Bcc collections all empty, and at the same time ReceivedDate is null. Also the Sender is null.
If you consider that it is possible to have more empty mails like that in the Draft folder which could have different mail bodies, I think it is not a good idea to detect duplicates by comparing email headers only.
You can load the message and see yourself with the following code:
var mail = new MailMessage();
mail.Load(@"empty_draft.msg");
Console.WriteLine("Sender is null: " + (mail.Sender == null));
Console.WriteLine("#To: " + mail.To.Count);
Console.WriteLine("#From: " + mail.From.Count);
Console.WriteLine("#CC: " + mail.CC.Count);
Console.WriteLine("#BCC: " + mail.Bcc.Count);
Console.WriteLine("Date: " + mail.Date);
Console.WriteLine("ReceivedDate is null: " + (mail.ReceivedDate == null));