public function fetchMessages()
    {

        //count the messages
        $this->countMessages();

        //if there are zero emails report this to the user
        if ($this->email_count == 0) {

            $this->log('There are no emails to process!');

            return false;
        }

        $this->log($this->email_count . ' ' . \Strings::pluralize($this->email_count, 'email') . ' to process.');

        for ($i = 1; $i < $this->email_count + 1; $i++) {

            $email = new Email;

            //set the message index in case we want to delete it later
            $email->index = $i;

            //get all the header info
            $this->parseHeaderInfo($email, imap_headerinfo($this->inbox, $i));

            $structure = \imap_fetchstructure($this->inbox, $i);

            //the type of email format
            $email->subtype = \strtolower($structure->subtype);

            $email->structure = $structure;

            //if the email is divided into parts, html, plain, attachments, etc
            if (isset($structure->parts)) {

                $part_id = 1;

                foreach ($structure->parts as $part) {

                    //get type 0 = text, 1 = multipart, 2 = message,
                    //3 = application, 4 = audio, 5= image, 6= video, 7 = other
                    $type = $part->type;

                    //multipart
                    $sub_id = 1;
                    if ($type == 1 && isset($part->parts)) {
                        foreach ($part->parts as $part) {
                            $part->part_id = $part_id . '.' . $sub_id;
                            $this->examinePart($email, $part);

                            $sub_id++;
                        }
                    } else {
                        $part->part_id = $part_id;
                        $this->examinePart($email, $part, $part_id);
                    }

                    $part_id++;
                }
            } else {

                //it is just a plain text email
                $email->body = \imap_fetchbody($this->inbox, $i, 1);
                $email->body_encoding = $structure->encoding;
            }

            //if the body is base64 encoded, decode it
            if ($email->body_encoding == 3) {
                $email->body = \base64_decode($email->body);
            }

            $this->log(print_r($email, 1));

            //store the email
            $this->emails[] = $email;
        }
    }