* * Contributors: Pawel Tomicki * Enrique Garcia M. * Ulises Hernandez * * Description: * A class for sending MIME based e-mail messages. * * + Plain Text * + HTML * + Plain Text with Attachments * + HTML with Attachments * + HTML with Embedded Images * + HTML with Embedded Images and Attachments * * ********************************************************************** */ class nxs_mimemail { /** * Vars */ var $debug_status = "yes"; // "yes" | "no" | "halt" var $charset = "ISO-8859-1"; var $mail_subject = "No subject"; var $mail_from = "Anonymous "; var $mail_to; var $mail_cc; var $mail_bcc; var $mail_text; var $mail_html; var $mail_type; var $mail_header; var $mail_body; var $mail_reply_to; var $mail_return_path; var $attachments_index; var $attachments = array(); var $attachments_img = array(); var $boundary_mix; var $boundary_rel; var $boundary_alt; var $sended_index; var $error_msg = array( 1 => 'Mail was not sent', 2 => 'Body Build Incomplete', 3 => 'Need a mail recipient in mail_to', 4 => 'No valid Email', 5 => 'Opening File' ); var $mime_types = array( 'gif' => 'image/gif', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpe' => 'image/jpeg', 'bmp' => 'image/bmp', 'png' => 'image/png', 'tif' => 'image/tiff', 'tiff' => 'image/tiff', 'swf' => 'application/x-shockwave-flash', 'doc' => 'application/msword', 'xls' => 'application/vnd.ms-excel', 'ppt' => 'application/vnd.ms-powerpoint', 'pdf' => 'application/pdf', 'ps' => 'application/postscript', 'eps' => 'application/postscript', 'rtf' => 'application/rtf', 'bz2' => 'application/x-bzip2', 'gz' => 'application/x-gzip', 'tgz' => 'application/x-gzip', 'tar' => 'application/x-tar', 'zip' => 'application/zip', 'html' => 'text/html', 'htm' => 'text/html', 'txt' => 'text/plain', 'css' => 'text/css', 'js' => 'text/javascript' ); /** * Constructor * void nxs_mimemail() */ function nxs_mimemail(){ $this->boundary_mix = "=-nxs_mix_" . md5(uniqid(rand())); $this->boundary_rel = "=-nxs_rel_" . md5(uniqid(rand())); $this->boundary_alt = "=-nxs_alt_" . md5(uniqid(rand())); $this->attachments_index = 0; $this->sended_index = 0 ; if(!defined('BR')){ define('BR', (strstr(PHP_OS, 'WIN') ? "\r\n" : "\n"), TRUE); } } /** * void set_from(string mail_from, [string name]) */ function set_from($mail_from, $name = ""){ if ($this->validate_mail($mail_from)){ $this->mail_from = !empty($name) ? "$name <$mail_from>" : $mail_from; } else { $this->mail_from = "Anonymous "; } } /** * bool set_to(string mail_to, [string name]) */ function set_to($mail_to, $name = ""){ if ($this->validate_mail($mail_to)){ $this->mail_to = !empty($name) ? "$name <$mail_to>" : $mail_to; return true; } return false; } /** * bool set_cc(string mail_cc, [string name]) */ function set_cc($mail_cc, $name = ""){ if ($this->validate_mail($mail_cc)){ $this->mail_cc = !empty($name) ? "$name <$mail_cc>" : $mail_cc; return true; } return false; } /** * bool set_bcc(string mail_bcc, [string name]) */ function set_bcc($mail_bcc, $name = ""){ if ($this->validate_mail($mail_bcc)){ $this->mail_bcc = !empty($name) ? "$name <$mail_bcc>" : $mail_bcc; return true; } return false; } /** * bool add_to(string mail_to, [string name]) */ function add_to($mail_to, $name = ""){ if ($this->validate_mail($mail_to)){ $mail_to = !empty($name) ? "$name <$mail_to>" : $mail_to; $this->mail_to = !empty($this->mail_to) ? $this->mail_to . ", " . $mail_to : $mail_to; return true; } return false; } /** * bool add_cc(string mail_cc, [string name]) */ function add_cc($mail_cc, $name = ""){ if ($this->validate_mail($mail_cc)){ $mail_cc = !empty($name) ? "$name <$mail_cc>" : $mail_cc; $this->mail_cc = !empty($this->mail_cc) ? $this->mail_cc . ", " . $mail_cc : $mail_cc; return true; } return false; } /** * bool add_bcc(string mail_bcc, [string name]) */ function add_bcc($mail_bcc, $name = ""){ if ($this->validate_mail($mail_bcc)){ $mail_bcc = !empty($name) ? "$name <$mail_bcc>" : $mail_bcc; $this->mail_bcc = !empty($this->mail_bcc) ? $this->mail_bcc . ", " . $mail_bcc : $mail_bcc; return true; } return false; } /** * bool set_reply_to(string mail_reply_to, [string name]) */ function set_reply_to($mail_reply_to, $name = ""){ if ($this->validate_mail($mail_reply_to)){ $this->mail_reply_to = !empty($name) ? "$name <$mail_reply_to>" : $mail_reply_to; return true; } return false; } /** * bool set_return_path(string mail_return_path) */ function set_return_path($mail_return_path){ if ($this->validate_mail($mail_return_path)){ $this->mail_return_path = $mail_return_path; return true; } return false; } /** * void set_subject(string subject) */ function set_subject($subject){ $this->mail_subject = !empty($subject) ? $subject : "No subject"; } /** * void set_text(string text) */ function set_text($text){ if (!empty($text)){ $this->mail_text = $text; } } /** * void set_html(string html) */ function set_html($html){ if (!empty($html)){ $this->mail_html = $html; } } /** * string get_eml() */ function get_eml() { if ($this->build_body()){ return 'To: ' . $this->mail_to . BR . 'Subject: ' . $this->mail_subject . BR . $this->mail_header . BR . BR . $this->mail_body; } return false; } /** * void new_mail([mixed from], [mixed to], [string subject], [string text], [string html]) */ function new_mail($from = "", $to = "", $subject = "", $text = "", $html = ""){ // First, clear all vars $this->mail_subject = ""; $this->mail_from = ""; $this->mail_to = ""; $this->mail_cc = ""; $this->mail_bcc = ""; $this->mail_text = ""; $this->mail_html = ""; $this->mail_header = ""; $this->mail_body = ""; $this->mail_reply_to = ""; $this->mail_return_path = ""; $this->attachments_index = 0; $this->sended_index = 0; // Clear Array Vars $this->attachments = array(); $this->attachments_img = array(); // Asign vars if (is_array($from)){ $this->set_from($from[0],$from[1]); $this->set_return_path($from[0]); } else { $this->set_from($from); $this->set_return_path($from); } if (is_array($to)){ $this->set_to($to[0],$to[1]); } else { $this->set_to($to); } $this->set_subject($subject); $this->set_text($text); $this->set_html($html); } /** * void add_attachment(mixed file, string name, [string type]) */ function add_attachment($file, $name, $type = ""){ if (($content = $this->open_file($file))){ $this->attachments[$this->attachments_index] = array( 'content' => chunk_split(base64_encode($content), 76, BR), 'name' => $name, 'type' => (empty($type) ? $this->get_mimetype($name): $type), 'embedded' => false ); $this->attachments_index++; } } /** * bool send() */ function send(){ if ($this->sended_index == 0 && !$this->build_body()){ $this->debug(1); return false; } if (!empty($this->mail_return_path) && $this->php_version_check('4.0.5') && !($this->php_version_check('4.2.3') && ini_get('safe_mode'))){ ini_set("SMTP", "mail.globalstar.gr"); return mail($this->mail_to, $this->mail_subject, $this->mail_body, $this->mail_header, '-f'.$this->mail_return_path); } else { ini_set("SMTP", "mail.globalstar.gr"); return mail($this->mail_to, $this->mail_subject, $this->mail_body, $this->mail_header); } } /** * Private * bool build_body() */ function build_body(){ switch ($this->parse_elements()){ case 1: $this->build_header("Content-Type: text/plain; charset=\"$this->charset\""); $this->mail_body = $this->mail_text; break; case 3: $this->build_header("Content-Type: multipart/alternative; boundary=\"$this->boundary_alt\""); $this->mail_body .= "--" . $this->boundary_alt . BR; $this->mail_body .= "Content-Type: text/plain" . BR; $this->mail_body .= "Content-Transfer-Encoding: 7bit" . BR . BR; $this->mail_body .= $this->mail_text . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . BR; $this->mail_body .= "Content-Type: text/html; charset=\"$this->charset\"" . BR; $this->mail_body .= "Content-Transfer-Encoding: 7bit" . BR . BR; $this->mail_body .= $this->mail_html . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . "--" . BR; break; case 5: $this->build_header("Content-Type: multipart/mixed; boundary=\"$this->boundary_mix\""); $this->mail_body .= "--" . $this->boundary_mix . BR; $this->mail_body .= "Content-Type: text/plain" . BR; $this->mail_body .= "Content-Transfer-Encoding: 7bit" . BR . BR; $this->mail_body .= $this->mail_text . BR . BR; foreach($this->attachments as $value){ $this->mail_body .= "--" . $this->boundary_mix . BR; $this->mail_body .= "Content-Type: " . $value['type'] . "; name=\"" . $value['name'] . "\"" . BR; $this->mail_body .= "Content-Disposition: attachment; filename=\"" . $value['name'] . "\"" . BR; $this->mail_body .= "Content-Transfer-Encoding: base64" . BR . BR; $this->mail_body .= $value['content'] . BR . BR; } $this->mail_body .= "--" . $this->boundary_mix . "--" . BR; break; case 7: $this->build_header("Content-Type: multipart/mixed; boundary=\"$this->boundary_mix\""); $this->mail_body .= "--" . $this->boundary_mix . BR; $this->mail_body .= "Content-Type: multipart/alternative; boundary=\"$this->boundary_alt\"" . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . BR; $this->mail_body .= "Content-Type: text/plain" . BR; $this->mail_body .= "Content-Transfer-Encoding: 7bit" . BR . BR; $this->mail_body .= $this->mail_text . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . BR; $this->mail_body .= "Content-Type: text/html; charset=\"$this->charset\"" . BR; $this->mail_body .= "Content-Transfer-Encoding: 7bit" . BR . BR; $this->mail_body .= $this->mail_html . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . "--" . BR . BR; foreach($this->attachments as $value){ $this->mail_body .= "--" . $this->boundary_mix . BR; $this->mail_body .= "Content-Type: " . $value['type'] . "; name=\"" . $value['name'] . "\"" . BR; $this->mail_body .= "Content-Disposition: attachment; filename=\"" . $value['name'] . "\"" . BR; $this->mail_body .= "Content-Transfer-Encoding: base64" . BR . BR; $this->mail_body .= $value['content'] . BR . BR; } $this->mail_body .= "--" . $this->boundary_mix . "--" . BR; break; case 11: $this->build_header("Content-Type: multipart/related; type=\"multipart/alternative\"; boundary=\"$this->boundary_rel\""); $this->mail_body .= "--" . $this->boundary_rel . BR; $this->mail_body .= "Content-Type: multipart/alternative; boundary=\"$this->boundary_alt\"" . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . BR; $this->mail_body .= "Content-Type: text/plain" . BR; $this->mail_body .= "Content-Transfer-Encoding: 7bit" . BR . BR; $this->mail_body .= $this->mail_text . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . BR; $this->mail_body .= "Content-Type: text/html; charset=\"$this->charset\"" . BR; $this->mail_body .= "Content-Transfer-Encoding: 7bit" . BR . BR; $this->mail_body .= $this->mail_html . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . "--" . BR . BR; foreach($this->attachments as $value){ if ($value['embedded']){ $this->mail_body .= "--" . $this->boundary_rel . BR; $this->mail_body .= "Content-ID: <" . $value['embedded'] . ">" . BR; $this->mail_body .= "Content-Type: " . $value['type'] . "; name=\"" . $value['name'] . "\"" . BR; $this->mail_body .= "Content-Disposition: attachment; filename=\"" . $value['name'] . "\"" . BR; $this->mail_body .= "Content-Transfer-Encoding: base64" . BR . BR; $this->mail_body .= $value['content'] . BR . BR; } } $this->mail_body .= "--" . $this->boundary_rel . "--" . BR; break; case 15: $this->build_header("Content-Type: multipart/mixed; boundary=\"$this->boundary_mix\""); $this->mail_body .= "--" . $this->boundary_mix . BR; $this->mail_body .= "Content-Type: multipart/related; type=\"multipart/alternative\"; boundary=\"$this->boundary_rel\"" . BR . BR; $this->mail_body .= "--" . $this->boundary_rel . BR; $this->mail_body .= "Content-Type: multipart/alternative; boundary=\"$this->boundary_alt\"" . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . BR; $this->mail_body .= "Content-Type: text/plain" . BR; $this->mail_body .= "Content-Transfer-Encoding: 7bit" . BR . BR; $this->mail_body .= $this->mail_text . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . BR; $this->mail_body .= "Content-Type: text/html; charset=\"$this->charset\"" . BR; $this->mail_body .= "Content-Transfer-Encoding: 7bit" . BR . BR; $this->mail_body .= $this->mail_html . BR . BR; $this->mail_body .= "--" . $this->boundary_alt . "--" . BR . BR; foreach($this->attachments as $value){ if ($value['embedded']){ $this->mail_body .= "--" . $this->boundary_rel . BR; $this->mail_body .= "Content-ID: <" . $value['embedded'] . ">" . BR; $this->mail_body .= "Content-Type: " . $value['type'] . "; name=\"" . $value['name'] . "\"" . BR; $this->mail_body .= "Content-Disposition: attachment; filename=\"" . $value['name'] . "\"" . BR; $this->mail_body .= "Content-Transfer-Encoding: base64" . BR . BR; $this->mail_body .= $value['content'] . BR . BR; } } $this->mail_body .= "--" . $this->boundary_rel . "--" . BR . BR; foreach($this->attachments as $value){ if (!$value['embedded']){ $this->mail_body .= "--" . $this->boundary_mix . BR; $this->mail_body .= "Content-Type: " . $value['type'] . "; name=\"" . $value['name'] . "\"" . BR; $this->mail_body .= "Content-Disposition: attachment; filename=\"" . $value['name'] . "\"" . BR; $this->mail_body .= "Content-Transfer-Encoding: base64" . BR . BR; $this->mail_body .= $value['content'] . BR . BR; } } $this->mail_body .= "--" . $this->boundary_mix . "--" . BR; break; default: $this->debug(2); return false; } $this->sended_index++; return true; } /** * Private * void build_header() */ function build_header($content_type){ if (!empty($this->mail_from)){ $this->mail_header .= "From: " . $this->mail_from . BR; $this->mail_header .= !empty($this->mail_reply_to) ? "Reply-To: " . $this->mail_reply_to . BR : "Reply-To: " . $this->mail_from . BR; } if (!empty($this->mail_cc)){ $this->mail_header .= "Cc: " . $this->mail_cc . BR; } if (!empty($this->mail_bcc)){ $this->mail_header .= "Bcc: " . $this->mail_bcc . BR; } if (!empty($this->mail_return_path)){ $this->mail_header .= "Return-Path: " . $this->mail_return_path . BR; } $this->mail_header .= "MIME-Version: 1.0" . BR; $this->mail_header .= "X-Mailer: neXus MIME Mail - PHP/". phpversion() . BR; $this->mail_header .= $content_type; } /** * Private * bool php_version_check(string vercheck) */ function php_version_check($vercheck){ $minver = str_replace(".","", $vercheck); $curver = str_replace(".","", phpversion()); if($curver >= $minver){ return true; } else { return false; } } /** * Private * mixed parse_elements() */ function parse_elements(){ if (empty($this->mail_to)){ $this->debug(3); return false; } $this->mail_type = 0; $this->search_images(); if (!empty($this->mail_text)){ $this->mail_type = $this->mail_type + 1; } if (!empty($this->mail_html)){ $this->mail_type = $this->mail_type + 2; if (empty($this->mail_text)){ $this->mail_text = strip_tags(eregi_replace("
", BR, $this->mail_html)); $this->mail_type = $this->mail_type + 1; } } if ($this->attachments_index != 0){ if (count($this->attachments_img) != 0){ $this->mail_type = $this->mail_type + 8; } if ((count($this->attachments) - count($this->attachments_img)) >= 1){ $this->mail_type = $this->mail_type + 4; } } return $this->mail_type; } /** * Private * void search_images() */ function search_images(){ if ($this->attachments_index != 0){ foreach($this->attachments as $key => $value){ //TNX to Pawel Tomicki, Enrique Garcia M. //only one instruction to support background and src, better REGEX syntax //additional CSS support if (preg_match('/(css|image)/i', $value['type']) && preg_match('/\s(background|href|src)\s*=\s*[\"|\'](' . $value['name'] . ')[\"|\'].*>/is', $this->mail_html)) { $img_id = md5($value['name']) . ".nxs@mimemail"; $this->mail_html = preg_replace('/\s(background|href|src)\s*=\s*[\"|\'](' . $value['name'] . ')[\"|\']/is', ' \\1="cid:' . $img_id . '"', $this->mail_html); $this->attachments[$key]['embedded'] = $img_id; $this->attachments_img[] = $value['name']; } } } } /** * Private * bool validate_mail(string mail) */ function validate_mail($mail){ if (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$',$mail)){ return true; } $this->debug(4, $mail); return false; } /** * Private * string get_mimetype(string name) */ function get_mimetype($name) { $ext_array = explode(".", $name); if (($last = count($ext_array) - 1) != 0){ $ext = $ext_array[$last]; if (isset($this->mime_types[$ext])) return $this->mime_types[$ext]; } return "application/octet-stream"; } /** * Private * int open_file(string file) */ function open_file($file){ if(($fp = @fopen($file, 'r'))){ $content = fread($fp, filesize($file)); fclose($fp); return $content; } $this->debug(5, $file); return false; } /** * Private * void debug(string msg, [string element]) */ function debug($msg, $element=""){ if ($this->debug_status == "yes"){ echo "
Error: " . $this->error_msg[$msg] . " $element
"; } elseif ($this->debug_status == "halt"){ die ("
Error: " . $this->error_msg[$msg] . " $element
"); } return false; } } ?> Energa

 

Ονοματεπώνυμο
E-mail
Θέμα
Μήνυμα
Αποστολή

ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΗΝ ENERGA A.E.
Για οποιαδήποτε πληροφορία μπορείτε να επικοινωνήσετε μαζί μας στην διεύθυνση:
ENERGA Α.Ε.
Ερυθρού Σταυρού 5,
151 23, Μαρούσι
Τηλ: 210 6711707
Fax: 210 6753230
Email:info@energa.gr