From 07f5140771388c9e0c8a99b0dd2e5d950bdb173b Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Thu, 14 Oct 2021 15:16:42 +1100 Subject: moving h-source subdir out. --- Library/Email.php | 246 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 Library/Email.php (limited to 'Library/Email.php') diff --git a/Library/Email.php b/Library/Email.php new file mode 100644 index 0000000..9d2ff19 --- /dev/null +++ b/Library/Email.php @@ -0,0 +1,246 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to send an e-mail +class Email { + + //sent to parameters (array) + private $_sendTo = array(); + + //cc parameters (array) + private $_cc = array(); + + //bcc parameters (array) + private $_bcc = array(); + + //the address of the sender + private $_from = null; + + //subject (string) + private $_subject = null; + + //charset + private $_charset = "iso-8859-1"; + + //Content-Transfer-Encoding + private $_ctencoding = "7bit"; + + //body + private $_body = ''; + + //headers + private $_headers = null; + + //check flag. If _check = true than check the mail addresses + private $_check = null; + + //regular expression to check each e-mail address + private $_addressRegExp = null; + + //array containing all the errors encountered during the execution + public $errorsArray = array(); + + public function __construct($bool = true) + { + $this->_check = $bool; + } + + //set the sentTo addresses array + //$addresses: array of e-mail addresses or a string + public function sendTo($addresses) + { + $this->_sendTo = explode(',',$addresses); + } + + //set the subject + public function subject($subject) + { + $this->_subject = $subject; + } + + //set the cc addresses array + //$addresses: array of e-mail addresses or a string + public function cc($addresses) + { + $this->_cc = explode(',',$addresses); + } + + //set the bcc addresses array + //$addresses: array of e-mail addresses or a string + public function bcc($addresses) + { + $this->_bcc = explode(',',$addresses); + } + + //set the address of the sender + public function from($address) + { + $this->_from = $address; + } + + //set the charset + public function charset($charset) + { + $this->_charset = $charset; + } + + //set the Content-Transfer-Encoding + public function ctencoding($ctencoding) + { + $this->_ctencoding = $ctencoding; + } + + //set the text body + public function body($body) + { + $this->_body = $body; + } + + //set the address regular expression + public function addressRegExp($regExp) + { + $this->_addressRegExp = $regExp; + } + + //check if the mail address is valid + public function isValidAddress($address) + { + + if( preg_match( '/^[^<>]*<(.+)>$/', $address, $matches ) ) + { + $address = $matches[1]; + } + + if (isset($this->_addressRegExp)) + { + if (preg_match($this->_addressRegExp,$address)) + { + return true; + } + else + { + return false; + } + } + else + { + if (checkMail($address)) return true; + } + + return false; + + } + + //check the addresses inside the $addresses array + public function checkAddresses($addresses) + { + foreach ($addresses as $address) + { + if(!$this->isValidAddress($address)) return false; + } + return true; + } + + //build the mail + public function buildMail() + { + + if (empty($this->_sendTo)) + { + $this->errorsArray[] = 'no address specified'; + return false; + } + + if ($this->_check) + { + if (!$this->checkAddresses($this->_sendTo)) + { + $this->errorsArray[] = 'errors in the sendTo address validation'; + return false; + } + + if (!empty($this->_cc)) + { + if (!$this->checkAddresses($this->_cc)) + { + $this->errorsArray[] = 'errors in the cc address validation'; + return false; + } + } + + if (!empty($this->_bcc)) + { + if (!$this->checkAddresses($this->_bcc)) + { + $this->errorsArray[] = 'errors in the bcc address validation'; + return false; + } + } + + if (isset($this->_from)) + { + if (!$this->checkAddresses(array($this->_from))) + { + $this->errorsArray[] = 'errors in the from address validation'; + return false; + } + } + } + + if (strcmp($this->_subject,'') === 0) + { + $this->errorsArray[] = 'no subject specified'; + return false; + } + + $headers = null; + if (isset($this->_from)) $headers .= "From: ".$this->_from."\r\n"; + $headers .= "MIME-Version: 1.0\r\n"; + $headers .= "Content-Type: text/plain; charset=\"".$this->_charset."\"\r\n"; + $headers .= "Content-Transfer-Encoding: ".$this->_ctencoding."\r\n"; + if (!empty($this->_cc)) $headers .= "CC: ".implode(',',$this->_cc)."\r\n"; + if (!empty($this->_bcc)) $headers .= "Bcc: ".implode(',',$this->_bcc)."\r\n"; + + $this->_headers = $headers; + + return true; + + } + + public function send() + { + if (!$this->buildMail()) return false; + + $to = implode(',',$this->_sendTo); + + if (!@mail($to,$this->_subject,$this->_body,$this->_headers)) + { + $this->errorsArray[] = 'error in the send process'; + return false; + } + + return true; + } + +} \ No newline at end of file -- cgit v1.2.3