from = $from; $this->rcpt = $rcpt; $this->body = $body; } /** * Return the mail only part of the from address * * @return string */ public function getFromEmail() { if(preg_match('#(.*?)<(.*?)>#', $this->from, $matches)) { return $matches[2]; } return $this->from; } /** * Get a list of all recipients (mail only part) * * @return array */ public function getTo() { $rcpt = array(); // We need the mail only part of all recipients $addresses = explode(',', $this->rcpt); foreach($addresses as $addr) { // parse address if(preg_match('#(.*?)<(.*?)>#', $addr, $matches)) { $rcpt[] = trim($matches[2]); } else { $rcpt[] = trim($addr); } } $rcpt = array_filter($rcpt); $rcpt = array_unique($rcpt); return $rcpt; } /** * Return the whole message body ready to be send by DATA * * Includes end of data signature and strips the BCC header * * @return string */ public function toString() { // we need to remove the BCC header here $lines = preg_split('/\r?\n/', $this->body); $count = count($lines); for($i=0; $i<$count; $i++) { if(trim($lines[$i]) === '') break; // end of headers, we're done if(substr($lines[$i],0, 4) == 'Bcc:') { unset($lines[$i]); // we found the Bcc: header and remove it while(substr($lines[++$i],0, 1) === ' ') { unset($lines[$i]); // indented lines are header continuation } break; // header removed, we're done } } $body = join($this->CRLF, $lines); return $body . $this->CRLF . $this->CRLF . "." . $this->CRLF; } }