Beispiel #1
0
 /**
  * Initialization before sending messages
  *
  * @return void
  */
 protected function _presendInit()
 {
     // Fournir si possible un Message-Id: conforme au RFC1036,
     // sinon SpamAssassin denoncera un MSGID_FROM_MTA_HEADER
     $sender_mailer = $this->getOption('sender_mailer');
     if (Helper::isEmail($sender_mailer)) {
         preg_match('/(@\\S+)/', $sender_mailer, $domain);
         $this->setRegistry('Message-Id', '<' . time() . '_' . rand() . '_' . md5($this->getMessage()->get('text')) . $domain[1] . '>', 'headers');
     } else {
         $this->addError(sprintf('!! - Error in "sender" address (%s) - the message will probably be considered as a spam.', $sender_mailer));
     }
 }
 /**
  * Message builder
  *
  * @return self
  */
 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)) {
         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;
 }