Scalability: Desiging a message table
You can go through the following embedded json document to implement
  your message collection and can ensure index on "mail_id" key to avoid
  scanning all documents. For your information here collection serve as
  table and each document serve as row of a table.


{
mail_id:string
sentMails:{
            [
                {
                sent_at: datetime,
                subject: string,
                sent_to: string,
                cc_to:[array of mailid strings],
                bcc_to:[array of mailid strings],
                attachments:[
                                {
                                attachment_name:string,
                                attachment_type:strng
                                }
                            ],
                sent_mail_content: string               
                }
            ]
            }

receivedMails:{
                [
                    {
                    received_at: datetime,  
                    subject: string,                
                    received_from: string,
                    cc_to:[array of mailid strings],
                    attachments:[
                                    {
                                    attachment_name:string,
                                    attachment_type:strng
                                    }
                                ],
                    received_mail_content: string
                    }
                ]   
            }
}


I hope it will help.