mirror of
https://github.com/php/web-wiki.git
synced 2025-08-13 13:33:46 +00:00
94 lines
2.5 KiB
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;
|
|
}
|
|
|
|
}
|