Is it possible to capture the "Message-ID" of an email message sent with SmtpClient?

Uwe Keim picture Uwe Keim · May 27, 2012 · Viewed 9.7k times · Source

Using the SmtpClient and MailMessage classes in .NET to send emails through a local mail server (hMailServer), I currently found no way to get the Message-ID header value of a sent message.

The idea behind

I'm trying to programmatically track messages that are undeliverable, so I have to find a way to identify replies from the destination SMTP server that rejects a certain message.

Now I thought of simply remembering the Message-ID SMTP header value and parse incoming mails for this ID.

I've tried to inspect the Headers collection after sending the message, but I did not find any Message-ID.

My question

Is it possible to get the Message-ID header value that my SMTP server adds during sending of a MailMessage instance?

Update 2012-05-27

As per this example I've successfully tried to manually generate a Message-ID on my own, just before sending.

All my examples work so far, so it seems that this is a solution to my question.

Answer

Juan Carlos Velez picture Juan Carlos Velez · Jul 3, 2015

You can add your own message id before send the email. I use the next code:

Guid id = Guid.NewGuid(); //Save the id in your database 
mensajeEmail.Headers.Add("Message-Id", String.Format("<{0}@{1}>",id.ToString(),"mail.example.com"));

Note: For download messages I use OpenPop.Net, I check the message.Headers.InReplyTo property, and there is the message id sended.