Files
php-web-wiki/dokuwiki/lib/plugins/smtp/classes/Message.php

94 lines
2.5 KiB
PHP

<?php
namespace splitbrain\dokuwiki\plugin\smtp;
/**
* Class Message
*
* Overrides the Message class with what we need to reuse the SMTP mailer without using
* their message composer
*
* @package splitbrain\dokuwiki\plugin\smtp
*/
class Message extends \Tx\Mailer\Message {
protected $from;
protected $rcpt;
protected $body;
/**
* @param string $from Sender Address
* @param string $rcpt all recipients (TO, CC, BCC)
* @param string $body the full message body including headers
*/
public function __construct($from, $rcpt, $body) {
$this->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;
}
}