PHP IMAP - Do emails have to have a messageid?

vitalyp picture vitalyp · Dec 15, 2011 · Viewed 10.7k times · Source

I'm retrieving emails from Gmail using PHP and IMAP; however, some emails don't have a messageid. Aren't all messages supposed to have a messageid?

I need a unique id for reference so i'm not sure how else to keep track of emails without it.

Am i doing something wrong?

For example here is an email header i get

 [date] => Sun, 06 Nov 2011 21:21:56 -0500
    [subject] => Daylight Saving Time?  Chili's Saving Time!
    [to] => [email protected]
    [message_id] => 
    [from] => [email protected]
    [sender] => [email protected]
    [reply_toaddress] => [email protected]
    [size] => 14385
    [msgno] =>  156
    [status] => Unread

Thanks

Answer

Michael Berkowski picture Michael Berkowski · Dec 15, 2011

Any MTA I have ever encountered will add a Message-ID if one is not already present. However, if you need to keep track of messages or thread them, you will need to set a the Message-ID. The References header and the In-Reply-To header use the value of a previous Message-ID to relate messages together.

References contains a list of previous Message-ID values in the reply chain, and In-Reply-To contains the Message-ID to which the current message is a direct reply.

Note that according to the RFC-2822 specification, a Message-ID is technically not required. Well-behaved MTAs generally include one, but some commenters below describe instances where a Message ID was not present, causing failures in messaging clients.