X-Git-Url: https://git-public.kairo.at/?p=php-utility-classes.git;a=blobdiff_plain;f=include%2Fclasses%2Femail.php-class;fp=include%2Fclasses%2Femail.php-class;h=0000000000000000000000000000000000000000;hp=ff03a17363534d9083423d5e7538b9e0427f412e;hb=7b9ebce7d25e4eaa557e8a64f8b1ed15aad1a9bb;hpb=6638efd5690cd46471a3e01c164e572956a34aa3 diff --git a/include/classes/email.php-class b/include/classes/email.php-class deleted file mode 100644 index ff03a17..0000000 --- a/include/classes/email.php-class +++ /dev/null @@ -1,347 +0,0 @@ - - * - * ***** END LICENSE BLOCK ***** */ - -class email { - // email PHP class - // class/object for creating a new mail and send it - // - // function __construct() - // CONSTRUCTOR - // - // private $debug_toSingleAddress - // address to send mail to in debug mode - // - // private $subject - // the mail's subject line - // - // private $sender - // the mail's sender (array; fields see recipients) - // - // private $replyto - // Reply-to address (array; fields see recipients) - // - // private $recipients - // array of recipients (To: line) - // fields: name - real name - // mail - email address - // - // private $cc - // array of CC recipients (fields like recipients) - // - // private $bcc - // array of BCC recipients (fields like recipients) - // - // private $headers - // array containing all additional headers - // fields: name - headers name - // content - header content - // - // private $content_type - // the mail's content type (MIME-type) [default: text/plain] - // - // private $charset - // the mail's charset [default: iso-8859-15] - // - // private $mailtext - // the main mail body - // - // private $attachments - // array containing all attachments - // fields: name - attachment name - // content - attachment content - // type - MIME type of that attachment - // - // public function setDebugAddress($debug_email) - // debug mode: send only to this address - // - // public function setSubject($newsubject) - // set subject of mail - // - // public function setSender($email, [$name]) - // set sender of mail - // - // public function setReplyTo($email, [$name]) - // set reply-to address - // - // public function addRecipient($email, [$name]) - // add a recipient to the mail - // - // public function addCC($email, [$name]) - // add a CC recipient to the mail - // - // public function addBCC($email, [$name]) - // add a BCC recipient to the mail - // - // public function addHeader($hname, [$hcontent]) - // add a header to the mail - // - // public function addHeaderAddress($hname, $email, [$name]) - // add an address header to the mail, possibly with both name and mail parts - // - // public function setCharset($newcharset) - // set charset for this mail - // - // public function addMailText($textpart) - // add some text to the mail - // - // public function addAttachment($aname, $acontent, [$atype]) - // add an attachment to the mail, use given file name, content and MIME type (defaults to application/octet-stream) - // - // public function getAddresses([$addrtype]) - // returns an array of all addresses this mail gets sent to - // fields: email, name, addrtype - // addrtype is one of to/cc/bcc - // the $addrtype parameter is a comma-separated list of such types, default: all of them - // - // public function send() - // really send the mail - // - // private function mimeencode($fieldtext, [$stringescape]) - // helper function: - // encode given field text, ready to be placed into an e-mail MIME header - // if the boolean $stringescape is true, make sure this is sent as a single word in RFC2822 context (e.g. for names) - // see http://www.ietf.org/rfc/rfc2822.txt for the RFC in question - - private $debug_toSingleAddress = ''; - private $subject; - private $sender = array(); - private $replyto = array(); - private $recipients = array(); - private $cc = array(); - private $bcc = array(); - private $headers = array(); - private $content_type = 'text/plain'; - private $charset = 'iso-8859-15'; - private $mailtext = ''; - private $attachments = array(); - - function __construct() { - // *** constructor *** - } - - public function setDebugAddress($debug_email) { $this->debug_toSingleAddress = $debug_email; } - - public function setSubject($newsubject) { $this->subject = $newsubject; } - - public function setSender($email, $name = '') { $this->sender = array('mail' => $email, 'name' => $name); } - - public function setReplyTo($email, $name = '') { $this->replyto = array('mail' => $email, 'name' => $name); } - - public function addRecipient($email, $name = '') { - $this->recipients[] = array('mail' => $email, 'name' => $name); - } - - public function addCC($email, $name = '') { - $this->cc[] = array('mail' => $email, 'name' => $name); - } - - public function addBCC($email, $name = '') { - $this->bcc[] = array('mail' => $email, 'name' => $name); - } - - public function addHeader($hname, $hcontent = '') { - $this->headers[] = array('name' => $hname, 'content' => $hcontent); - } - - public function addHeaderAddress($hname, $email, $name = '') { - if (strlen($name)) { $hcontent = $this->mimeencode($name, true).' <'.$email.'>'; } - else { $hcontent = $email; } - $this->headers[] = array('name' => $hname, 'content' => $hcontent); - } - - public function setCharset($newcharset) { $this->charset = $newcharset; } - - public function addMailText($textpart) { $this->mailtext .= $textpart; } - - public function addAttachment($aname, $acontent, $atype = 'application/octet-stream') { - $this->attachments[] = array('name' => $aname, 'content' => $acontent, 'type' => $atype); - } - - public function getAddresses($addrtype = null) { - // returns all addresses this mail gets sent to - if (!is_array($addrtype)) { - if (strlen($addrtype)) { $addrtype = explode(',', strtolower($addrtype)); } - else { $addrtype = array('to','cc','bcc'); } - } - $mailaddresses = array(); - - if (in_array('to', $addrtype)) { - foreach ($this->recipients as $address) { - if (strlen(@$address['mail'])) { - $mailaddresses[] = array('mail'=>$address['mail'], - 'name'=>strlen($address['name'])?$address['name']:'', - 'addrtype'=>'to'); - } - } - } - if (in_array('cc', $addrtype)) { - foreach ($this->cc as $address) { - if (strlen(@$address['mail'])) { - $mailaddresses[] = array('mail'=>$address['mail'], - 'name'=>strlen($address['name'])?$address['name']:'', - 'addrtype'=>'cc'); - } - } - } - if (in_array('bcc', $addrtype)) { - foreach ($this->bcc as $address) { - if (strlen(@$address['mail'])) { - $mailaddresses[] = array('mail'=>$address['mail'], - 'name'=>strlen($address['name'])?$address['name']:'', - 'addrtype'=>'bcc'); - } - } - } - - return $mailaddresses; - } - - public function send() { - global $util; - $mtxt = ''; - $hdrs = 'MIME-Version: 1.0'."\n"; - $subj = $this->mimeencode($this->subject); - if (strlen($this->sender['name'])) { - $hdrs .= 'From: '.$this->mimeencode($this->sender['name'], true).' <'.$this->sender['mail'].'>'."\n"; - } - else { $hdrs .= 'From: '.$this->sender['mail']."\n"; } - if (count($this->replyto)) { - if (strlen($this->replyto['name'])) { - $hdrs .= 'Reply-to: '.$this->mimeencode($this->replyto['name'], true).' <'.$this->replyto['mail'].'>'."\n"; - } - else { $hdrs .= 'Reply-to: '.$this->replyto['mail']."\n"; } - } - if (count($this->recipients)) { - $recpt = ''; - foreach ($this->recipients as $address) { - if (strlen(@$address['mail'])) { - if (strlen($address['name'])) { $recpt .= $this->mimeencode($address['name'], true).' <'.$address['mail'].'>,'; } - else { $recpt .= $address['mail'].','; } - } - } - $recpt = preg_replace('/,$/', '', $recpt); - } - if (!strlen($recpt)) { - return null; - } - if (count($this->cc)) { - $adrs = ''; - foreach ($this->cc as $address) { - if (strlen($address['name'])) { $adrs .= $this->mimeencode($address['name'], true).' <'.$address['mail'].'>,'; } - else { $adrs .= $address['mail'].','; } - } - $adrs = preg_replace('/,$/', '', $adrs); - $hdrs .= (strlen($this->debug_toSingleAddress)?'X-Real-':'').'Cc: '.$adrs."\n"; - } - if (count($this->bcc)) { - $adrs = ''; - foreach ($this->bcc as $address) { - if (strlen($address['name'])) { $adrs .= $this->mimeencode($address['name'], true).' <'.$address['mail'].'>,'; } - else { $adrs .= $address['mail'].','; } - } - $adrs = preg_replace('/,$/', '', $adrs); - $hdrs .= (strlen($this->debug_toSingleAddress)?'X-Real-':'').'Bcc: '.$adrs."\n"; - } - if (count($this->headers)) { - foreach ($this->headers as $header) { - $hdrs .= $header['name'].': '.$header['content']."\n"; - } - } - if (count($this->attachments)) { - // create random boundary, 20 chars, always beginning with KaiRo ;-) - $boundary = 'KaiRo'; - for ($i = 1; $i <= 15; $i++) { - $r = rand(0, 61); - if ($r < 10) { $boundary .= chr($r + 48); } - elseif ($r < 36) { $boundary .= chr($r + 55); } - elseif ($r < 62) { $boundary .= chr($r + 61); } - } - $hdrs .= 'Content-Type: multipart/mixed; boundary="'.$boundary.'";'."\n"; - $hdrs .= 'Content-Transfer-Encoding: 7bit'."\n"; - $mtxt .= 'This part of the E-mail should never be seen. If'."\n"; - $mtxt .= 'you are reading this, consider upgrading your e-mail'."\n"; - $mtxt .= 'client to a MIME-compatible client.'."\n"; - $mtxt .= "\n".'--'.$boundary."\n"; - if (preg_match('|^text/|', $this->content_type)) { - $mtxt .= 'Content-Type: '.$this->content_type.'; charset="'.$this->charset.'"'."\n"; - } - else { - $mtxt .= 'Content-Type: '.$this->content_type."\n"; - } - $mtxt .= 'Content-Transfer-Encoding: 8bit'."\n\n"; - } - else { - if (preg_match('|^text/|', $this->content_type)) { - $hdrs .= 'Content-Type: '.$this->content_type.'; charset="'.$this->charset.'"'."\n"; - } - else { - $hdrs .= 'Content-Type: '.$this->content_type."\n"; - } - $hdrs .= 'Content-Transfer-Encoding: 8bit'."\n"; - } - $mtxt .= stripslashes($this->mailtext); - if (count($this->attachments)) { - foreach ($this->attachments as $attach) { - $mtxt .= "\n".'--'.$boundary."\n"; - $mtxt .= 'Content-Type: '.$attach['type'].'; name="'.$attach['name'].'";'."\n"; - if (preg_match('/^(text|message)\//', $attach['type'])) { - $mtxt .= 'Content-Transfer-Encoding: 8bit'."\n"; - $mtxt .= 'Content-Disposition: attachment'."\n\n"; - $mtxt .= $attach['content']; - $mtxt .= "\n"; - } - else { - $mtxt .= 'Content-Transfer-Encoding: base64'."\n"; - $mtxt .= 'Content-Disposition: attachment'."\n\n"; - $mtxt .= rtrim(chunk_split(base64_encode($attach['content']), 76)); ; - $mtxt .= "\n"; - } - } - $mtxt .= '--'.$boundary.'--'."\n"; - } - - if (strlen($this->debug_toSingleAddress)) { - $hdrs .= 'X-Real-To: '.$recpt."\n"; - $recpt = $this->debug_toSingleAddress; - } - - //print('Subject: '.$util->htmlify($subj).'
'."\n"); - //print('To: '.$util->htmlify($recpt).'
'."\n"); - //print(nl2br($util->htmlify($hdrs))); - //print(nl2br($util->htmlify($mtxt))); - return mail($recpt, $subj, $mtxt, $hdrs); - } - - private function mimeencode($fieldtext, $stringescape = false) { - $mText = imap_8bit($fieldtext); - $is_qpformat = ($mText != $fieldtext); - if ($stringescape && preg_match('/[^\w !#$%&\'*+\/=?^`{|}~-]/', $mText)) { - // if needed, make this a quoted-string instead of an atom (to speak in RFC2822 language) - $mText = '"'.strtr($mText, array('"' => '\"', '\\' => '\\\\')).'"'; - } - if ($is_qpformat) { - $mText = strtr($mText, array('_' => '=5F', ' ' => '_', '?' => '=3F')); - $mText = '=?'.strtoupper($this->charset).'?Q?'.$mText.'?='; - } - return $mText; - } -} -?>