src/MimeMailer/MimeMessage.php
public function buildMessage()
    {
        $this->_buildInit();

        // From header
        if (is_array($this->from) && count($this->from)>0) {
            $from = null;
            while (is_null($from)==true) {
                foreach ($this->from as $n=>$m) {
                    $from = array($n=>$m);
                }
            }
            $this->from = $from;
        }
        if (count($this->from)==0) {
            $this->getMailer()->addError('No sender setted!');
        } else {
            $this->message .= Helper::listAddresses($this->from, 'from');
        }

        // To header
        if (count($this->to)>0) {
            $this->message .= Helper::listAddresses($this->to, 'to');
        }

        // CC header
        if (count($this->cc)>0) {
            $this->message .= Helper::listAddresses($this->cc, 'cc');
        }

        // BCC header
        if (count($this->bcc)>0) {
            $this->message .= Helper::listAddresses($this->bcc, 'bcc');
        }

        // Headers
        foreach ($this->getMailer()->getRegistry('headers') as $entry=>$v_entry) {
            if (isset($v_entry)) {
                $this->message .= Helper::headerTagger($entry, $v_entry).Mailer::$LINE_ENDING;
            }
        }
        $bound = 0;

        // Mail type
        $type = $this->getMailer()->getRegistry('message_type');
        if (!is_null($type) && $type!='text/plain') {
            $bound = 1;
            $this->message .= Helper::headerTagger("Content-Type", $type,
                array('boundary'=>$this->getMailer()->getRegistry('boundary'))).Mailer::$LINE_ENDING;
            $this->message .= "This is a multi-part message in MIME format.".Mailer::$LINE_ENDING;
            if ($type == 'multipart/mixed') {
                $this->message .= Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER.$this->getMailer()->getRegistry('boundary').Mailer::$LINE_ENDING;
                $this->message .= Helper::headerTagger("Content-Type", "multipart/alternative",
                    array('boundary'=>$this->getMailer()->getRegistry('boundary_ctt'))).Mailer::$LINE_ENDING;
            }
        }

        // Text content
        if (strlen($this->text)/* && !strlen($this->html)*/) {
            if ($bound) {
                $this->message .= Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER.$this->getMailer()->getRegistry('boundary_ctt').Mailer::$LINE_ENDING;
                //ne prend pas les css en compte
//                $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "7bit").Mailer::$LINE_ENDING;
                $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "8bit").Mailer::$LINE_ENDING;
                $this->message .= Helper::headerTagger("Content-Type", "text/plain",
                    array('charset'=>$this->getMailer()->getOption('charset'))).Mailer::$LINE_ENDING;
            }
            $this->message .= Mailer::$LINE_ENDING.$this->text;
        }

        // HTML content
        if (strlen($this->html)) {
            if ($bound) {
                $this->message .= Mailer::$LINE_ENDING.Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER
                    .$this->getMailer()->getRegistry('boundary_ctt').Mailer::$LINE_ENDING;
            }
            // prend les css en compte
//            $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "7bit").Mailer::$LINE_ENDING;
            $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "8bit").Mailer::$LINE_ENDING;
//            $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "quoted-printable").Mailer::$LINE_ENDING;
            $this->message .= Helper::headerTagger("Content-Type", "text/html",
                array('charset'=>$this->getMailer()->getOption('charset'))).Mailer::$LINE_ENDING;
            $this->message .= Mailer::$LINE_ENDING.trim($this->html, Mailer::$LINE_ENDING);
        }
        if ($bound) {
            $this->message .= Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER
                .$this->getMailer()->getRegistry('boundary_ctt').Mailer::BOUNDARY_CLOSER.Mailer::$LINE_ENDING;
        }

        // Attachments
        /* @todo what is max ? */
        $max = 10;
        if (count($this->attachment)>0) {
            for ($i=0;$i<$max;$i++) {
                if (isset($this->attachment[$i])) {
                    $file = fread(fopen($this->attachment[$i], "r"), filesize($this->attachment[$i]));
                    $filename = basename($this->attachment[$i]);
                    $this->message .= Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER.$this->getMailer()->getRegistry('boundary').Mailer::$LINE_ENDING;
                    $this->message .= Helper::headerTagger("Content-Type", Helper::getMimeType($filename),
                        array('name'=>$filename, 'charset'=>$this->getMailer()->getOption('charset'))).Mailer::$LINE_ENDING;
                    $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "base64").Mailer::$LINE_ENDING;
                    $this->message .= Helper::headerTagger("Content-Disposition", 'attachment',
                        array('filename'=>$filename)).Mailer::$LINE_ENDING;
                    $this->message .= Helper::headerTagger("Content-Description", $filename).Mailer::$LINE_ENDING;
                    $this->message .= Mailer::$LINE_ENDING.chunk_split(base64_encode($file));
                    $file = $filename = "";
                }
            }
            $this->message .= Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER.$this->getMailer()->getRegistry('boundary').Mailer::BOUNDARY_CLOSER.Mailer::$LINE_ENDING;
        }

        return $this;
    }
public function buildMessage()
    {
        $this->_buildInit();

        // From header
        if (is_array($this->from) && count($this->from)>0) {
            $from = null;
            while (is_null($from)==true) {
                foreach ($this->from as $n=>$m) {
                    $from = array($n=>$m);
                }
            }
            $this->from = $from;
        }
        if (count($this->from)==0) {
            $this->getMailer()->addError('No sender setted!');
        } else {
            $this->message .= Helper::listAddresses($this->from, 'from');
        }

        // To header
        if (count($this->to)>0) {
            $this->message .= Helper::listAddresses($this->to, 'to');
        }

        // CC header
        if (count($this->cc)>0) {
            $this->message .= Helper::listAddresses($this->cc, 'cc');
        }

        // BCC header
        if (count($this->bcc)>0) {
            $this->message .= Helper::listAddresses($this->bcc, 'bcc');
        }

        // Headers
        foreach ($this->getMailer()->getRegistry('headers') as $entry=>$v_entry) {
            if (isset($v_entry)) {
                $this->message .= Helper::headerTagger($entry, $v_entry).Mailer::$LINE_ENDING;
            }
        }
        $bound = 0;

        // Mail type
        $type = $this->getMailer()->getRegistry('message_type');
        if (!is_null($type) && $type!='text/plain') {
            $bound = 1;
            $this->message .= Helper::headerTagger("Content-Type", $type,
                array('boundary'=>$this->getMailer()->getRegistry('boundary'))).Mailer::$LINE_ENDING;
            $this->message .= "This is a multi-part message in MIME format.".Mailer::$LINE_ENDING;
            if ($type == 'multipart/mixed') {
                $this->message .= Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER.$this->getMailer()->getRegistry('boundary').Mailer::$LINE_ENDING;
                $this->message .= Helper::headerTagger("Content-Type", "multipart/alternative",
                    array('boundary'=>$this->getMailer()->getRegistry('boundary_ctt'))).Mailer::$LINE_ENDING;
            }
        }

        // Text content
        if (strlen($this->text)/* && !strlen($this->html)*/) {
            if ($bound) {
                $this->message .= Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER.$this->getMailer()->getRegistry('boundary_ctt').Mailer::$LINE_ENDING;
                //ne prend pas les css en compte
//                $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "7bit").Mailer::$LINE_ENDING;
                $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "8bit").Mailer::$LINE_ENDING;
                $this->message .= Helper::headerTagger("Content-Type", "text/plain",
                    array('charset'=>$this->getMailer()->getOption('charset'))).Mailer::$LINE_ENDING;
            }
            $this->message .= Mailer::$LINE_ENDING.$this->text;
        }

        // HTML content
        if (strlen($this->html)) {
            if ($bound) {
                $this->message .= Mailer::$LINE_ENDING.Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER
                    .$this->getMailer()->getRegistry('boundary_ctt').Mailer::$LINE_ENDING;
            }
            // prend les css en compte
//            $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "7bit").Mailer::$LINE_ENDING;
            $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "8bit").Mailer::$LINE_ENDING;
//            $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "quoted-printable").Mailer::$LINE_ENDING;
            $this->message .= Helper::headerTagger("Content-Type", "text/html",
                array('charset'=>$this->getMailer()->getOption('charset'))).Mailer::$LINE_ENDING;
            $this->message .= Mailer::$LINE_ENDING.trim($this->html, Mailer::$LINE_ENDING);
        }
        if ($bound) {
            $this->message .= Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER
                .$this->getMailer()->getRegistry('boundary_ctt').Mailer::BOUNDARY_CLOSER.Mailer::$LINE_ENDING;
        }

        // Attachments
        /* @todo what is max ? */
        $max = 10;
        if (count($this->attachment)>0) {
            for ($i=0;$i<$max;$i++) {
                if (isset($this->attachment[$i])) {
                    $file = fread(fopen($this->attachment[$i], "r"), filesize($this->attachment[$i]));
                    $filename = basename($this->attachment[$i]);
                    $this->message .= Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER.$this->getMailer()->getRegistry('boundary').Mailer::$LINE_ENDING;
                    $this->message .= Helper::headerTagger("Content-Type", Helper::getMimeType($filename),
                        array('name'=>$filename, 'charset'=>$this->getMailer()->getOption('charset'))).Mailer::$LINE_ENDING;
                    $this->message .= Helper::headerTagger("Content-Transfer-Encoding", "base64").Mailer::$LINE_ENDING;
                    $this->message .= Helper::headerTagger("Content-Disposition", 'attachment',
                        array('filename'=>$filename)).Mailer::$LINE_ENDING;
                    $this->message .= Helper::headerTagger("Content-Description", $filename).Mailer::$LINE_ENDING;
                    $this->message .= Mailer::$LINE_ENDING.chunk_split(base64_encode($file));
                    $file = $filename = "";
                }
            }
            $this->message .= Mailer::$LINE_ENDING.Mailer::BOUNDARY_OPENER.$this->getMailer()->getRegistry('boundary').Mailer::BOUNDARY_CLOSER.Mailer::$LINE_ENDING;
        }

        return $this;
    }
Message builder

@return self