public function Build ()
    {

        // Create Boundaries

        $boundary		= '=====' . md5 (uniqid (time ()));

        // Reset headers

        $this->_headers	= array ();

        // Add MIME Headers

        $this->addHeader ('MIME-version: 1.0');
        $this->addHeader ('Content-Type: Multipart/alternative;' . $this->_nl . chr (9) . 'boundary="' . $boundary . '"');

        // Start Message

        $this->_message	= NULL;

        // If there is a template file

        if ($this->_tpl)
        {

            // Load it and add to html

            $this->addHTML (@file_get_contents ($this->_tpl));

        }

        // If HTML data

        if ($this->_htmlSet || $this->_plain)
        {

            // Construct the HTML and add it to the message

            $this->_message	.= $this->constructHTML ($boundary);

        }

        // If Body

        if ($this->_bodySet)
        {

            // Construct the body

            if (!$this->constructBody ())
            {

                // Add error and return FALSE

                new \Sonic\Message ('error', 'Cannot add message body!');
                return FALSE;

            }

        }

        // If Attachments

        if ($this->_attachmentsSet)
        {

            // Add them to the message

            foreach ($this->_attachments as $attachment)
            {
                $this->_message	.= $this->constructAttachment ($attachment, $boundary);
            }

        }

        // Finish Message

        $this->_message	.= '--' . $boundary . '--' . $this->_nl;

        // Return TRUE

        return TRUE;

    }