Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- error_reporting(0);
- //This is the NEW version 3.9.1
- /*
- 3.9.1
- re-fixed send_to not chosen
- approx line 3468
- if(!isset($this->p_vars[drop_name]) || $this->p_vars[drop_name] =='' ||$this->p_vars[drop_name] = false)
- 3.9
- array of licenses
- 3.8
- $this->ssl
- $this->port
- version 2.02 phpmailer
- fixed bug with quotation using confirmation == 1
- line 4727 htmlspecialchars
- 3.7
- fixed licensing issue with new pathinfo code
- fixed confirm = true when $_GET['cid'] is used (line 4277)
- 3.6
- fix Notice errors
- fix $dom (approx line 2961)
- 3.5
- https fix
- removes underscore on error template
- 3.4
- Fixes field required
- 3.3
- Makes filenames available in the templates.
- {{file1}}
- 3.2.9
- Adjusted the licensing to compensate for urls like
- foobar.co.uk
- with this code
- if(count($dom1) > 2 && (strlen($dom1[1])+strlen($dom[2])) > 4) array_shift($dom1);
- Fixed postTokenName
- and changed it to
- tokenPostName (x10 places)
- 3.2.8
- Made field names available in mail merge template
- Added controls.php switcher
- Added config file for antispam token session code
- Make it possible to require files
- 3.2.7
- Webmaster "From" over-ride
- BG image replacement for templates
- Fixed html receipt to visitor removing br tags
- Updated createToken code with my new sauce
- *Simplified temp code registration
- *New licensing to fix license errors with subdomains
- Ability to add CC
- 3.2.6
- File names added to webmaster email
- 3.2.5
- >Fixed multiple checkbox for sending email
- to multiple recipients
- >drop_down_default added to controls.php
- which when set to true will grab recipient[0]
- instead of throwing error if no dropdown chosen
- */
- /*3.2.4
- Made it possible to send text to recipient
- and html to webmaster or vice versa
- $set['recipient_html'] = true;
- $set['webmaster_html'] = true;
- Removed extraneous <br> from text email
- confirmation page
- extra end routine
- */
- /*3.2.3
- Changed
- antiSpam session info to actuall work ;)
- */
- /*Licensing*/
- /*free = 0
- basic = 1
- pro = 2
- */
- /*~ class.smtp.php
- .---------------------------------------------------------------------------.
- | Software: PHPMailer - PHP email class |
- | Version: 2.0.2 |
- | Contact: via sourceforge.net support pages (also www.codeworxtech.com) |
- | Info: http://phpmailer.sourceforge.net |
- | Support: http://sourceforge.net/projects/phpmailer/ |
- | ------------------------------------------------------------------------- |
- | Author: Andy Prevost (project admininistrator) |
- | Author: Brent R. Matzelle (original founder) |
- | Copyright (c) 2004-2007, Andy Prevost. All Rights Reserved. |
- | Copyright (c) 2001-2003, Brent R. Matzelle |
- | ------------------------------------------------------------------------- |
- | License: Distributed under the Lesser General Public License (LGPL) |
- | http://www.gnu.org/copyleft/lesser.html |
- | This program is distributed in the hope that it will be useful - WITHOUT |
- | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
- | FITNESS FOR A PARTICULAR PURPOSE. |
- | ------------------------------------------------------------------------- |
- | We offer a number of paid services (www.codeworxtech.com): |
- | - Web Hosting on highly optimized fast and secure servers |
- | - Technology Consulting |
- | - Oursourcing (highly qualified programmers and graphic designers) |
- '---------------------------------------------------------------------------'
- /**
- * SMTP is rfc 821 compliant and implements all the rfc 821 SMTP
- * commands except TURN which will always return a not implemented
- * error. SMTP also provides some utility methods for sending mail
- * to an SMTP server.
- * @package PHPMailer
- * @author Chris Ryan
- */
- class SMTP
- {
- /**
- * SMTP server port
- * @var int
- */
- var $SMTP_PORT = 25;
- /**
- * SMTP reply line ending
- * @var string
- */
- var $CRLF = "\r\n";
- /**
- * 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 \r and/or \n 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("\r\n","\n",$msg_data);
- $msg_data = str_replace("\r","\n",$msg_data);
- $lines = explode("\n",$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 = "\t" . $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;
- }
- }
- /*~ class.phpmailer.php
- .---------------------------------------------------------------------------.
- | Software: PHPMailer - PHP email class |
- | Version: 2.0.2 |
- | Contact: via sourceforge.net support pages (also www.codeworxtech.com) |
- | Info: http://phpmailer.sourceforge.net |
- | Support: http://sourceforge.net/projects/phpmailer/ |
- | ------------------------------------------------------------------------- |
- | Author: Andy Prevost (project admininistrator) |
- | Author: Brent R. Matzelle (original founder) |
- | Copyright (c) 2004-2007, Andy Prevost. All Rights Reserved. |
- | Copyright (c) 2001-2003, Brent R. Matzelle |
- | ------------------------------------------------------------------------- |
- | License: Distributed under the Lesser General Public License (LGPL) |
- | http://www.gnu.org/copyleft/lesser.html |
- | This program is distributed in the hope that it will be useful - WITHOUT |
- | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
- | FITNESS FOR A PARTICULAR PURPOSE. |
- | ------------------------------------------------------------------------- |
- | We offer a number of paid services (www.codeworxtech.com): |
- | - Web Hosting on highly optimized fast and secure servers |
- | - Technology Consulting |
- | - Oursourcing (highly qualified programmers and graphic designers) |
- '---------------------------------------------------------------------------'
- /**
- * PHPMailer - PHP email transport class
- * @package PHPMailer
- * @author Andy Prevost
- * @copyright 2004 - 2008 Andy Prevost
- */
- 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 = 'root@localhost';
- /**
- * Sets the From name of the message.
- * @var string
- */
- var $FromName = 'Root User';
- /**
- * 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 = "2.0.2";
- /**
- * 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 = "\n";
- 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) {
- include_once($this->PluginDir . 'class.smtp.php');
- $error = '';
- $bad_rcpt = array();
- if(!$this->SmtpConnect()) {
- 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\ttype=\"text/html\";%s\tboundary=\"%s\"%s", 'multipart/related', $this->LE, $this->LE, $this->boundary[1], $this->LE);
- } else {
- $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;');
- $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"');
- }
- break;
- case 'alt':
- $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;');
- $result .= $this->TextLine("\tboundary=\"" . $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" . "\tboundary=\"%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('/[\200-\377]/', $str)) {
- /* Can't use addslashes as we don't know what value has magic_quotes_sybase. */
- $encoded = addcslashes($str, "\0..\37\177\\\"");
- if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
- return ($encoded);
- } else {
- return ("\"$encoded\"");
- }
- }
- $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
- break;
- case 'comment':
- $x = preg_match_all('/[()"]/', $str, $matches);
- /* Fall-through */
- case 'text':
- default:
- $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $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, "\n"));
- }
- } else {
- $encoding = 'Q';
- $encoded = $this->EncodeQ($str, $position);
- $encoded = $this->WrapText($encoded, $maxlen, true);
- $encoded = str_replace('='.$this->LE, "\n", trim($encoded));
- }
- $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded);
- $encoded = trim(str_replace("\n", $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('/(?:\r\n|\r|\n)/', $input);
- $eol = "\r\n";
- $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 "\t", 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; " =\r\n" 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("[\r\n]", '', $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('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/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("\r\n", "\n", $str);
- $str = str_replace("\r", "\n", $str);
- $str = str_replace("\n", $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!' . "\n\n";
- }
- }
- /**
- * 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("\r", "", $str);
- $str = str_replace("\n", "", $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;
- }
- }
- /**
- * Copyright (c) 2003 Brian E. Lozier ([email protected])
- *
- * set_vars() method contributed by Ricardo Garcia (Thanks!)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
- class UFMTemplate {
- var $vars; /// Holds all the template variables
- var $path; /// Path to the templates
- /**
- * Constructor
- *
- * @param string $path the path to the templates
- *
- * @return void
- */
- function UFMTemplate($path = null) {
- $this->path = $path;
- $this->vars = array();
- }
- /**
- * Set the path to the template files.
- *
- * @param string $path path to template files
- *
- * @return void
- */
- function set_path($path) {
- $this->path = $path;
- }
- /**
- * Set a template variable.
- *
- * @param string $name name of the variable to set
- * @param mixed $value the value of the variable
- *
- * @return void
- */
- function set($name, $value) {
- $this->vars[$name] = $value;
- }
- /**
- * Set a bunch of variables at once using an associative array.
- *
- * @param array $vars array of vars to set
- * @param bool $clear whether to completely overwrite the existing vars
- *
- * @return void
- */
- function set_vars($vars, $clear = false) {
- if($clear) {
- $this->vars = $vars;
- }
- else {
- if(is_array($vars)) $this->vars = array_merge($this->vars, $vars);
- }
- }
- function set_vars_new($vars) {
- if(is_array($vars)) {
- foreach($vars as $vvv){
- $this->vars[$vvv] = $_POST[$vvv];
- }//foreach
- //$this->vars = array_merge($this->vars, $this->newVars);
- }//is_array
- }
- /**
- * Open, parse, and return the template file.
- *
- * @param string string the template file name
- *
- * @return string
- */
- function fetch($ufmFile) {
- extract($this->vars); // Extract the vars to local namespace
- ob_start(); // Start output buffering
- include($this->path . $ufmFile); // Include the file
- $contents = ob_get_contents(); // Get the contents of the buffer
- ob_end_clean(); // End buffering and discard
- return $contents; // Return the contents
- }
- }
- /**
- * An extension to Template that provides automatic caching of
- * template contents.
- */
- class UFMCachedTemplate extends UFMTemplate {
- var $cache_id;
- var $expire;
- var $cached;
- /**
- * Constructor.
- *
- * @param string $path path to template files
- * @param string $cache_id unique cache identifier
- * @param int $expire number of seconds the cache will live
- *
- * @return void
- */
- function UFMCachedTemplate($path, $cache_id = null, $expire = 900) {
- $this->UFMTemplate($path);
- $this->cache_id = $cache_id ? 'cache/' . md5($cache_id) : $cache_id;
- $this->expire = $expire;
- }
- /**
- * Test to see whether the currently loaded cache_id has a valid
- * corrosponding cache file.
- *
- * @return bool
- */
- function is_cached() {
- if($this->cached) return true;
- // Passed a cache_id?
- if(!$this->cache_id) return false;
- // Cache file exists?
- if(!file_exists($this->cache_id)) return false;
- // Can get the time of the file?
- if(!($mtime = filemtime($this->cache_id))) return false;
- // Cache expired?
- if(($mtime + $this->expire) < time()) {
- @unlink($this->cache_id);
- return false;
- }
- else {
- /**
- * Cache the results of this is_cached() call. Why? So
- * we don't have to double the overhead for each template.
- * If we didn't cache, it would be hitting the file system
- * twice as much (file_exists() & filemtime() [twice each]).
- */
- $this->cached = true;
- return true;
- }
- }
- /**
- * This function returns a cached copy of a template (if it exists),
- * otherwise, it parses it as normal and caches the content.
- *
- * @param $file string the template file
- *
- * @return string
- */
- function fetch_cache($file) {
- if($this->is_cached()) {
- $fp = @fopen($this->cache_id, 'r');
- $contents = fread($fp, filesize($this->cache_id));
- fclose($fp);
- return $contents;
- }
- else {
- $contents = $this->fetch($file);
- // Write the cache
- if($fp = @fopen($this->cache_id, 'w')) {
- fwrite($fp, $contents);
- fclose($fp);
- }
- else {
- die('Unable to write cache.');
- }
- return $contents;
- }
- }
- }
- class MailMerge extends UFMTemplate{
- var $test_array = '';
- var $new_string = '';
- var $string = '';
- function plug($plugFile, $array, $optional_array='')
- {
- //$contents = implode(" ", file($file));
- $this->set_vars_new($array);
- $jkbArray = $array;
- $contents = $this->fetch($plugFile);
- $old = $this->create_array($array);
- if($optional_array != '')
- {
- $new = $this->clean_array($array, $optional_array);
- }
- else
- {
- $new = $array;
- }
- $contents = str_replace($old, $new, $contents);
- $contents = preg_replace('/{{(.*)}}/iU', '', $contents);/*removes {{whatever}} left over*/
- return $contents;
- }//end of constructor
- function create_array($array)
- {
- foreach($array as $ar)
- {
- $new_stuff[] = "{{" . $ar . "}}";
- }
- return $new_stuff;
- }//end of create_array()
- function clean_array ($array, $optional_array)
- {
- foreach($array as $ab)
- {
- if(isset($_POST[$ab]) && $_POST[$ab] != "")
- {
- $ar = $_POST[$ab];
- }
- else
- {
- if(isset($optional_array[$ab]) && $optional_array[$ab] != "")
- {
- $ar = $optional_array[$ab];
- }
- else
- {
- $ar = "";
- }
- }
- if(!is_array($ar))
- //if(1==1)
- {
- $new_array[] = stripslashes($ar);
- }
- else
- {
- foreach($ar as $key2=>$arr)
- {
- $arr = stripslashes($arr);
- $string .= " " . $arr . ",";
- }
- $string = substr($string, 0, (strlen($string) - 1));
- $new_array[] = $string;
- unset($string);
- }
- }
- return $new_array;
- }//end of clean_array
- }//end of class MailMerge
- class UFMdb {
- function connect($database_vars)
- {
- if(isset($database_vars) && is_array($database_vars))
- {
- foreach($database_vars as $var=>$value)
- {
- $this->{$var} = $value;
- }
- }
- @mysql_connect($this->host, $this->user, $this->pass);
- mysql_select_db($this->dbase) or die(
- "Cannot connect to database");
- }//end of connect
- function query($query) {
- $query = mysql_query($query) or die(mysql_error());
- return $query;
- }
- function fetch_array($query) {
- $query = mysql_fetch_array($query);
- return $query;
- }
- function fetch_row($query) {
- $query = mysql_fetch_row($query);
- return $query;
- }
- function close() {
- mysql_close();
- }
- }//end of class db
- class UFMail {
- var $website;
- var $email;
- var $p_vars;
- var $recipient;
- var $testing;
- var $subject;
- var $redirect;
- var $banlist;
- var $headerfile;
- var $footerfile;
- var $cssfile;
- var $banned_ext;
- var $max_file_size;
- var $env_report;
- var $autoresponder;
- var $auto_from;
- var $auto_from_name;
- var $auto_content;
- var $auto_reply;
- var $auto_reply_name;
- var $first_name;
- var $ignore_these;
- var $error_message;
- var $webmaster_body;
- var $required;
- var $required_check;
- var $receipt;
- var $rcpt;
- var $referer_check;
- var $date_format;
- var $dropdown_name;
- var $dropdown_recipient;
- var $dropdown_list;
- var $p_file;
- var $field_check_ereg;
- var $auto_reply_body_alt;
- var $auto_reply_signaturesignature_alt;
- var $webmaster_body_intro_alt;
- var $dropdown_email_match;
- var $bcc;
- var $cc;
- var $file_name_array;
- var $send_attachment;
- var $jkbLicense;
- var $jkbLicenseType;
- var $dom;
- var $drop_down_default;
- var $required_filefields;
- function initialize($setup)
- {
- $url = trim($_SERVER['HTTP_HOST']);
- $parts = pathinfo($url);
- $bad = array('http://', 'www.','https://');
- $this->dom = str_replace($bad, '', $parts['basename']);
- /*prevent any chance of messing with my configuration scheme*/
- $set = '';
- unset($set);
- /*************
- Controls switcher
- *************/
- $controlFile = 'controls.php';
- if(isset($_GET['cid']) && is_numeric($_GET['cid']) && $_GET['cid'] != ''):
- if(is_file('controls-'.$_GET['cid'].'.php')):
- $controlFile = 'controls-'.$_GET['cid'].'.php';
- elseif(is_file('controls'.$_GET['cid'].'.php')):
- $controlFile = 'controls'.$_GET['cid'].'.php';
- endif;//file found, either controls-N.php or controlsN.php
- endif;//cid is set
- include $controlFile;
- /**** End controls file switch *********/
- foreach($set as $a=>$b)
- {
- $this->{$a} = $b;
- }//end of foreach setup variable
- $this->p_vars = $_POST;
- $this->p_file = $_FILES;
- $this->post_keys = array_keys($this->p_vars);
- $this->keep_these = array_diff($this->post_keys, $this->ignore_these);
- //set the recipient
- if(isset($this->dropdown_recipient) && ($this->dropdown_recipient == '1'))
- {
- if(!isset($this->p_vars[$this->dropdown_name]) || $this->p_vars[$this->dropdown_name] =='')
- {
- if(isset($this->drop_down_default) && $this->drop_down_default == true)
- {
- $chosen_email = $this->recipient[0];
- $this->recipient = "";
- $this->recipient = array($chosen_email);
- }
- else
- {
- $this->error_message .= $this->drop_down_error;
- }
- }
- else
- {
- define('chosen_email_id', $this->p_vars[$this->dropdown_name]);
- if(!is_array($this->p_vars[$this->dropdown_name]))
- {
- $chosen_email = $this->dropdown_list[$this->p_vars[$this->dropdown_name]];
- $this->recipient = "";
- $this->recipient = array($chosen_email);
- }
- else
- {
- foreach($this->p_vars[$this->dropdown_name] as $ceid)
- {
- $chosen_email[] = $this->dropdown_list[$ceid];
- }//end of foreach
- $this->recipient = "";
- $this->recipient = $chosen_email;
- }//end of else is array
- }
- if(isset($this->dropdown_email_match) && $this->dropdown_email_match == '1' && count($this->recipient) == '1')
- {
- $this->auto_from = $this->recipient[0];
- }
- }//end of dropdown
- /****************************
- New licensing procedure
- ***************************/
- $fi = explode('(',__FILE__);/*IIS*/
- if($_SERVER["SCRIPT_FILENAME"] && $_SERVER["SCRIPT_FILENAME"] != '')
- {
- $illegalInclude = ((realpath ($_SERVER["SCRIPT_FILENAME"]) != realpath ($fi[0])) && (realpath ($_SERVER["PATH_TRANSLATED"]) != realpath ($fi[0])));
- }
- else
- {
- /*IIS*/
- $illegalInclude = (realpath($_SERVER["PATH_TRANSLATED"]) != realpath ($fi[0]));
- }
- if($illegalInclude)
- {
- print "License error: i";
- exit;
- }
- if($license) {
- if(!is_array($license)) {
- $licenseParts = explode('-', $license);
- if(!$this->checkLicense($license)){
- echo 'License error - please check your configuration settings';
- exit;
- }
- } else {
- $licTest = false;//assume false
- foreach($license as $lic){
- if($this->checkLicense($lic)){
- $licTest = true;
- }
- }
- if(!$licTest){
- echo 'License error - please check your configuration settings';
- exit;
- }
- }
- }//license exists
- /*************************/
- $this->webmaster_body_intro_alt = $this->webmaster_body_intro;
- $this->webmaster_body_intro = $this->convert_language($this->webmaster_html, $this->webmaster_body_intro);
- $this->receipt_intro = $this->convert_language($this->recipient_html, $this->receipt_intro);
- $this->auto_reply_body_alt = $this->auto_reply_body;
- $this->auto_reply_body = $this->convert_language($this->recipient_html, $this->auto_reply_body);
- //this next line was added for advertisement version
- $this->auto_reply_signaturesignature_alt = $this->auto_reply_signaturesignature;
- $this->auto_reply_signaturesignature = $this->subvert_fix($this->auto_reply_signaturesignature);
- $this->auto_reply_signaturesignature = $this->convert_language($this->recipient_html, $this->auto_reply_signaturesignature);
- /*****************************
- New cleaner procudure
- **************************/
- if($this->extraSecurity == 1)
- {
- $this->p_vars = $this->dataCleaner($this->p_vars);
- }
- /***************************
- New AntiSpam
- ***************************/
- if($this->spamBlock == 1)
- {
- $this->antiSpam();
- }
- }//end of function initialize
- /****************************/
- function checkLicense($license){
- $licType = substr($license, -1, 1);
- $licenseParts = explode('-', $license);
- $test1 = substr(md5($this->dom.'oceanView'.$licType), 3, 10);
- $test2 = substr_replace(md5($this->dom.'forestPath'.$licType), '-', 5, 22);
- $test3 = substr(md5($test1.$test2.$licType), 20, 12);
- $testAll = strtoupper($test1.$test2.$test3.$licType);
- if(count($licenseParts) == 3)
- {
- /****Temp License Check********/
- $licenseStart = substr($licenseParts[2], 3);
- $licenseStart = $licenseStart/3;
- $testPeriod = 15;/*days*/
- $testTime = $testPeriod * 60 * 60 *24;
- if((mktime()-$testTime) > $licenseStart)
- {
- echo 'Your temporary license has expired';
- exit;
- }
- $test1 = substr(md5($this->dom.'oceanViewTemp'), 3, 10);
- $licenseStart = $licenseStart*3;
- $test4 = '-'.substr(md5($licenseStart.'abyssTemp'), 3, 3).$licenseStart;
- $test2 = substr_replace(md5($this->dom.$test1.$test4.'forestPathTemp'), '-', 5, 17);
- $testAll = strtoupper($test1.$test2.$test4);
- $licType = 2;/*Show them everything*/
- }
- if(!$license || $license != $testAll)
- {
- if($license == '' || $license == 'LicenseGoesHere') {
- $tempDomain = $_SERVER['HTTP_HOST'];
- echo 'Your license has not been set<br><br>';
- echo 'To set up a temporary license, click the button below:<br><br>
- <form action="http://www.ultimateformmail.com/tempLicense/tempLicense.php" method="post" enctype="multipart/form-data" name="form1">
- <input name="tempDomain" type="hidden" id="tempDomain" value="'.$tempDomain.'">
- Register a temporary license for <strong>'.$tempDomain .'</strong>
- now
- <input name="Register" type="submit" id="Register" value="Register »">
- </form>';
- exit;
- }
- else
- {
- return false;
- }
- }
- $this->jkbLicense = $license;
- $this->jkbLicenseType = $licType;
- return true;
- }//end of function checkLicense
- function check_vars()
- {
- //first check the referer
- if($this->referer_check == 1)
- {
- //nothing
- }//end of referer check
- if(!isset($this->p_vars['email']) && isset($this->autoresponder) && ($this->autoresponder == '1'))
- {
- $this->error_message .= $this->no_email_field;
- }
- $test = array_merge(array_keys($this->p_vars),array_keys($this->p_file));
- if(is_array($this->required))
- {
- $diff = array_diff($this->required, $test);
- if($diff)
- {
- foreach($diff as $dif)
- {
- $dif = $this->formatEmailContent($dif);
- $this->error_message .= sprintf($this->required_error, $dif);
- }
- }
- }
- /** 3.2.8 required files */
- $ftest = array();
- foreach($this->p_file as $fkey=>$fval):
- if(isset($fval['name']) && $fval['name'] != '' && $fval['size'] > 0) $ftest[] = $fkey;
- endforeach;
- if(is_array($this->required_filefields))
- {
- $diff = array_diff($this->required_filefields, $ftest);
- if($diff)
- {
- foreach($diff as $dif)
- {
- $dif = $this->formatEmailContent($dif);
- $this->error_message .= sprintf($this->required_error, $dif);
- }
- }
- }
- /***/
- foreach($this->p_vars as $key=>$value)
- {
- if(!in_array($key, $this->keep_these))
- {
- continue;
- }
- if(is_array($this->required))
- {
- if((in_array($key, $this->required)) && ($value == ""))
- {
- $key = $this->formatEmailContent($key);
- $this->error_message .= sprintf($this->required_error, $key);
- }
- if((in_array($key, $this->required)) && ($value != ""))
- {
- $this->required_check .= sprintf($this->required_no_error, $key);
- }
- }
- if(is_array($value))
- {
- $key1 = $key;
- if(is_array($this->required))
- {
- if((in_array($key, $this->required)) && (count($value) < 1))
- {
- $key = $this->formatEmailContent($key);
- $this->error_message .= sprintf($this->required_error, $key);
- }
- if((in_array($key, $this->required)) && (count($value) > 0))
- {
- $this->required_check .= sprintf($this->required_no_error, $key);
- }
- }
- if($this->dropdown_name != '' && $key == $this->dropdown_name && is_numeric($value))
- {
- $value = $this->recipient;
- $this->p_vars[$key] = $this->recipient;
- }
- foreach($value as $k=>$v)
- {
- $t = $k+1;
- $rrr = $key1 . "(" . $t . ")";
- $rrr = $this->formatEmailContent($rrr);
- $this->webmaster_body .= sprintf($this->post_info, $rrr, $v);
- }
- }
- else
- {
- if(isset($this->field_check_eregi[$key]) && $this->field_check_eregi[$key] != "" && isset($value) && $value != "")
- {
- if($this->eregi_check($key) == FALSE)
- {
- $this->error_message .= sprintf($this->invalid_error, $key);
- }
- }
- if(isset($this->field_check_ereg[$key]) && $this->field_check_ereg[$key] != "" && isset($value) && $value != "")
- {
- if($this->ereg_check($key) == FALSE)
- {
- $this->error_message .= sprintf($this->invalid_error, $key);
- }
- }
- if($key == 'email')
- {
- if($value == "" && $this->autoresponder == '1')
- {
- if(!in_array($key, $this->required))
- {
- $this->error_message .= sprintf($this->required_error, $key);
- }
- }
- else
- {
- if($this->check_banlist($value) == 0)
- {
- $this->error_message .= $this->email_banned;
- }
- }
- }//end of if email
- if($key == 'recipient_menu')//this is for drop down list of recipients in form
- {
- if(in_array($value, $this->recipient))
- {
- $this->recipient = "";
- $this->recipient = array($value);
- }
- else
- {
- $this->error_message .= sprintf($this->recipient_error, $value);
- }
- }//end of recipient_menu
- if($this->dropdown_name != '' && $key == $this->dropdown_name && is_numeric($value))
- {
- $value = $this->recipient[0];
- $this->p_vars[$key] = $this->recipient[0];
- $_POST[$key] = $this->recipient[0];
- }
- $rrr = $this->formatEmailContent($key);
- $this->webmaster_body .= sprintf($this->post_info, $rrr, $value);
- }
- }
- if(isset($this->p_file) && $this->p_file != "")
- {
- $this->check_files($this->p_file);
- }
- }//end function check_vars
- /****************************/
- function subvert_fix($string)
- {
- $letters = count_chars($string, 1);
- arsort($letters);
- $e = explode("\n", $string);
- $marker = 0;
- foreach($e as $a=>$b)
- {
- if(strlen(trim($b)) > 5)
- {
- $marker = $a;
- }
- }
- $diff = count($e) - $marker;
- for($i = $marker + 1; $i < count($e) + 1; $i++)
- {
- if(isset($e[$i]) && $e[$i] != "")
- {
- $test_array .= $e[$i];
- }
- }
- $test = count_chars($test_array, 1);
- $test_count = count($test);
- if($diff > $test_count)
- {
- for($t=0; $t<($marker + 1); $t++)
- {
- $new_string .= $e[$t] . "\n";
- }
- }
- else
- $new_string = $string;
- return $new_string;
- }//end of subvert_fix()
- /****************************************/
- function eregi_check($field)
- {
- if(!eregi($this->field_check_eregi[$field], $this->p_vars[$field]))
- {
- return FALSE;
- }
- else
- {
- return TRUE;
- }
- }//end of function eregi_check
- function ereg_check($field)
- {
- if(!ereg($this->field_check_ereg[$field], $this->p_vars[$field]))
- {
- return FALSE;
- }
- else
- {
- return TRUE;
- }
- }//end of function ereg_check
- function branch()
- {
- if($this->testing == 1 || isset($this->error_message))
- {
- //error_reporting(0);
- }
- if($this->testing == 1)
- {
- $error_content = $this->testing_title;
- if($this->error_message && $this->error_message != "")
- {
- $error_content .= "<h2>No email would be sent</h2>$this->error_message<br><br>";
- }
- else
- {
- if(is_array($this->recipient))
- {
- foreach($this->recipient as $to)
- {
- $error_content .= "<h2>The message would have been sent to $to</h2>";
- }
- }
- else
- {
- $error_content .= "<h2>The message would have been sent to $this->recipient</h2>";
- }
- }
- if($this->required_check && $this->required_check != "")
- {
- $error_content .= $this->required_check . "<br>";
- }
- $offset1 = $this->offset * 60 * 60;
- $now = date($this->date_format, mktime()+$offset1);
- $error_content .= sprintf($this->timestamp, $now);
- $this->webmaster_body = $this->convert_language(1, $this->webmaster_body);
- $error_content .= "<h2>The message would be:</h2>$this->webmaster_body";
- $error_content .= "<h2>These variables were set in the configuration</h2>";
- if($this->autoresponder == 1)
- {
- $error_content .= "An auto reply would be sent from " . $this->auto_from_name ." at email address " . $this->auto_from . ".<br>";
- if($this->receipt == 1)
- {
- $error_content .= "And you have decided to send a receipt.<br>";
- }
- }
- else
- {
- $error_content .= "NO auto reply would be sent from " . $this->auto_from_name ." at email address " . $this->auto_from . ".<br>";
- }
- if(isset($this->website))
- {
- $error_content .= "You indicate the website address is " . $this->website . ".<br>";
- }
- $error_content .= "<h2>You should turn off testing mode if you are satisfied with the results</h2>";
- $tpl = new UFMTemplate('');
- $error_content = $this->formatEmailContent($error_content);
- $tpl->set('error_content', $error_content);
- $testing_content = $tpl->fetch($this->error_template);
- echo $testing_content;
- }//end of testing = 1
- else
- {
- if($this->error_message && $this->error_message != "")
- {
- $error_content = sprintf($this->error_title, $this->error_message);
- $tpl = & new UFMTemplate('');
- $tpl->set('error_content', $error_content);
- $error_stuff = $tpl->fetch($this->error_template);
- echo $error_stuff;
- }//end of if error message
- else
- {
- /*Are we using a confirmation page?
- And is the confirmation var already set?*/
- if($this->confirmation_step && $this->confirmation_step == '1' && $this->p_vars['confirmFinal'] != '1')
- {
- $this->confirmationPage();
- }
- $this->webmaster_body = $this->convert_language($this->webmaster_html, $this->webmaster_body);
- if(isset($this->p_file) && $this->p_file != "")
- {
- foreach($this->p_file as $pkey=>$pvalue)
- {
- if($pvalue['name'] != '')
- {
- $this->file_upload_name = ($this->prevent_overwrite == 1 && (isset($this->file_save_dir) && $this->file_save_dir != '')) ? mktime() . $pvalue['name'] : $pvalue['name'];
- $file_name_array_tmp = array($pkey=>$this->file_upload_name);
- $file_name_ar[$pkey] = $this->file_upload_name;
- $this->p_vars = array_merge($this->p_vars, $file_name_array_tmp);
- array_push($this->keep_these, $pkey);
- }//if $pvalue['name'] != ''
- }//foreach
- $this->file_name_array = $file_name_ar;
- }
- //send the emails
- if($this->autoresponder == 1) $this->autoreply();
- $this->webmaster_notify();
- if($this->jkbLicenseType > 1)/*Pro or better*/
- {
- if(isset($this->file_save_dir) && $this->file_save_dir != '' && $this->file_upload == 1)
- {
- $this->file_save();
- }
- }
- if($this->jkbLicenseType > 1)/*Pro or better*/
- {
- if($this->use_database)
- {
- $this->database_put($this->keep_these);
- }
- }
- if($this->jkbLicenseType > 1 && $this->mail_list == 1)/*Pro or better*/
- {
- $this->mailList($this->p_vars);
- }
- if($this->extra_end_routine != '') $this->extra_perform($this->extra_end_routine);
- }
- }
- }//end of function branch
- /***************************/
- function autoreply()
- {
- $this->webmaster_body = stripslashes($this->webmaster_body);
- $rcpt = "";
- $html_rcpt = "";
- if($this->receipt == 1)
- {
- $html_rcpt = $this->receipt_intro. $this->webmaster_body;
- $rcpt = $this->receipt_intro;
- $rcpt .= str_replace("<br>", "
- ", $this->webmaster_body);
- $rcpt .= "
- ";
- $rcpt = stripslashes($rcpt);
- }
- if($this->auto_reply_name == "")
- {
- $this->auto_reply_name = $this->auto_from_name;
- }
- if($this->auto_reply == "")
- {
- $this->auto_reply = $this->auto_from;
- }
- $mail = new phpmailer();
- switch($this->email_type)
- {
- case 1:
- $mail->IsSMTP();
- break;
- case 2:
- $mail->IsMail();
- break;
- case 3:
- $mail->IsQmail();
- break;
- case 4:
- $mail->IsSendmail();
- break;
- default:
- $mail->IsSMTP();
- }
- $mail->Host = $this->host; // specify main and backup server
- $mail->SMTPAuth = $this->authorization; // turn on SMTP authentication
- if($this->authorization == "true")
- {
- $mail->Username = $this->username;
- $mail->Password = $this->password;
- }
- $mail->From = $this->auto_from;
- $mail->FromName = $this->auto_from_name;
- $mail->AddAddress($this->p_vars['email']); // name is optional
- $mail->AddReplyTo($this->auto_reply, $this->auto_reply_name);
- if(isset($this->recipient_html) && $this->recipient_html == '1')
- {
- $mail->IsHTML(true); // set email format to HTML
- //$mail->Body = $this->auto_reply_body . $html_rcpt . $this->auto_reply_signaturesignature;
- $rcpt_array = array('email_content');
- $this->keep_these = array_merge($this->keep_these, $rcpt_array);
- $email_content = $this->auto_reply_body . $html_rcpt . $this->auto_reply_signaturesignature;
- $mail_merge = array('email_content' => $email_content);
- if(!isset($this->template_bg_image_dir) || $this->template_bg_image_dir == '') $mail_merge['background_image_location']= 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/template/';
- else $mail_merge['background_image_location'] = $this->template_bg_image_dir;
- $tpl = & new MailMerge('');
- $tpl->set('email_content', $this->auto_reply_body . $html_rcpt . $this->auto_reply_signaturesignature);
- if(!isset($this->template_bg_image_dir) || $this->template_bg_image_dir == '') $mail_merge['background_image_location']= 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/template/';
- else $mail_merge['background_image_location'] = $this->template_bg_image_dir;
- //$mail->Body = $tpl->fetch($this->visitor_template);
- $mail->Body = $tpl->plug($this->visitor_template, $this->keep_these, $mail_merge);
- $searchAr = array('<br>','<br />');
- $replaceAr = '';
- $mail->AltBody = str_replace($searchAr, $replaceAr, $this->auto_reply_body . $rcpt . $this->auto_reply_signaturesignature_alt);
- }
- else
- {
- /*advertising or not*/
- //$mail->Body = $this->auto_reply_body . $rcpt . $this->auto_reply_signaturesignature . $jkb_advertisement;
- $mail->Body = $this->convert_language(0,$this->auto_reply_body . $rcpt . $this->auto_reply_signaturesignature);
- }
- $mail->Subject = sprintf($this->auto_reply_subject, $this->website);
- /**************************
- Are there files to attach to the autoreply?
- **************************/
- if($this->reply_attach_files != '' && is_array($this->reply_attach_files) && $this->jkbLicenseType > 1)
- {
- foreach($this->reply_attach_files as $aK=>$attachF)
- {
- $aHandle = fopen($attachF, "rb");
- $aContents = fread($aHandle, filesize($attachF));
- fclose($aHandle);
- if(is_numeric($aK))
- {
- /*try to grab the file name only*/
- $path_parts = pathinfo($attachF);
- $aName = $path_parts['basename'];
- }
- else
- {
- $aName = $aK;
- }
- $mail->AddStringAttachment($aContents, $aName);
- }//end of foreach
- }//end of reply_attach_files
- //$mail->AltBody = "Alt body here";
- $emailTypesToTry = array();
- if(!$mail->Send())
- {
- echo "Message could not be sent. ";
- echo "Mailer Error: " . $mail->ErrorInfo;
- }
- else
- {
- if($this->redirect != "")
- {
- //nothing
- }
- else
- {
- printf($this->auto_reply_confirm, $this->p_vars['email']);
- }
- }
- }//end of function autoreply
- function webmaster_notify()
- {
- $offset1 = $this->offset * 60 * 60;
- $now = date($this->date_format, mktime() + $offset1);
- $message_body = str_replace("<br>", "
- ", $this->webmaster_body);
- $message_body = stripslashes($message_body);
- $this->webmaster_body = stripslashes($this->webmaster_body);
- $mail = new phpmailer();
- switch($this->email_type)
- {
- case 1:
- $mail->IsSMTP();
- break;
- case 2:
- $mail->IsMail();
- break;
- case 3:
- $mail->IsQmail();
- break;
- case 4:
- $mail->IsSendmail();
- break;
- default:
- $mail->IsSMTP();
- }
- $mail->Host = $this->host; // specify main and backup server
- $mail->SMTPAuth = $this->authorization; // turn on SMTP authentication
- if(isset($this->ssl) && ($this->ssl == true || $this->ssl == 1)){
- $mail->SMTPSecure = 'ssl';
- }
- if(isset($this->port) && $this->port != ''){
- $mail->Port = $this->port;
- }
- if($this->authorization == "true")
- {
- $mail->Username = $this->username;
- $mail->Password = $this->password;
- }
- //did this in 2.6 to fix for forms without any email
- if(isset($this->p_vars['email']) && $this->p_vars['email'] != "")
- {
- $mail->From = $this->p_vars['email'];
- $mail->FromName = $this->p_vars['email'];
- }
- else
- {
- $mail->From = $this->recipient[0];
- $mail->FromName = $this->recipient[0];
- }
- if(isset($this->webmaster_from_override) && $this->webmaster_from_override != '') {
- $mail->From = $this->webmaster_from_override;
- $mail->FromName = $this->webmaster_from_override;
- }
- if(is_array($this->recipient))
- {
- foreach($this->recipient as $to)
- {
- $mail->AddAddress($to);
- }
- }
- else
- {
- $mail->AddAddress($this->recipient);
- } // name is optional
- //did this in 2.6 to fix for forms without any email
- if(isset($this->p_vars['email']) && $this->p_vars['email'] != "")
- {
- $mail->AddReplyTo($this->p_vars['email']);
- }
- else
- {
- $mail->AddReplyTo($this->recipient[0]);
- }
- if(isset($this->p_file) && $this->p_file != "")
- {
- foreach($this->p_file as $pkey=>$pvalue)
- {
- if(isset($pvalue['tmp_name']) && $pvalue['name'] != "" && $this->send_attachment == '1')
- {
- $mail->AddAttachment($pvalue['tmp_name'], $pvalue['name']); // add attachments
- }
- }
- }
- $mail->Subject = sprintf($this->webmaster_subject, $this->website);
- if(isset($this->bcc) && $this->bcc != '')
- {
- if(!is_array($this->bcc))
- {
- $mail->AddBCC($this->bcc);
- }
- else
- {
- foreach($this->bcc as $bccc)
- {
- $mail->AddBCC($bccc);
- }
- }
- }
- if(isset($this->cc) && $this->cc != '')
- {
- if(!is_array($this->cc))
- {
- $mail->AddCC($this->cc);
- }
- else
- {
- foreach($this->cc as $ccc)
- {
- $mail->AddCC($ccc);
- }
- }
- }
- if(isset($this->webmaster_html) && ($this->webmaster_html == '1'))
- {
- $mail->IsHTML(true); // set email format to HTML
- $rcpt_array = array('email_content','background_image_location');
- $this->keep_these = array_merge($this->keep_these, $rcpt_array);
- $email_content = sprintf($this->webmaster_body_intro, $now) . $this->webmaster_body;
- $mail_merge = array('email_content' => $email_content);
- $mail_merge = array_merge($mail_merge, $this->p_vars);//3.3
- if(!isset($this->template_bg_image_dir) || $this->template_bg_image_dir == '') $mail_merge['background_image_location']= 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/template/';
- else $mail_merge['background_image_location'] = $this->template_bg_image_dir;
- $tpl = & new MailMerge;
- $tpl->set('email_content', sprintf($this->webmaster_body_intro, $now) . $this->webmaster_body);
- if(!isset($this->template_bg_image_dir) || $this->template_bg_image_dir == '') $tpl->set('background_image_location', 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/template/');
- else $tpl->set('background_image_location', $this->template_bg_image_dir);
- $mail->Body = $tpl->plug($this->webmaster_template, $this->keep_these, $mail_merge);
- /*print $mail->Body;
- print "<br>".$this->webmaster_template;
- print "<br>";
- print_r($this->keep_these);
- print "<br>";
- print_r($mail_merge);
- exit;*/
- $searchAr = array('<br>','<br />');
- $replaceAr = '';
- $mail->AltBody = str_replace($searchAr, $replaceAr, sprintf($this->webmaster_body_intro_alt, $now) . $message_body);
- }
- else
- {
- /*$rcpt_array = array('email_content');
- $this->keep_these = array_merge($this->keep_these, $rcpt_array);
- $email_content = sprintf($this->webmaster_body_intro, $now) . $this->webmaster_body;
- $mail_merge = array('email_content' => $email_content);
- $tpl = & new MailMerge;
- $tpl->set('email_content', sprintf($this->webmaster_body_intro, $now) . $this->webmaster_body);
- $mail->Body = $this->html_to_text($tpl->plug($this->webmaster_template, $this->keep_these, $mail_merge));
- */
- $mail->Body = sprintf($this->webmaster_body_intro, $now) . $message_body;
- }
- // = "Alt body here";
- if(!$mail->Send())
- {
- echo "Message could not be sent. ";
- echo "Mailer Error: " . $mail->ErrorInfo;
- }
- else
- {
- if($this->redirect != "")
- {
- //nothing
- }
- else
- {
- if(is_array($this->recipient))
- {
- foreach($this->recipient as $to)
- {
- printf($this->webmaster_confirm, $to);
- }
- }
- else
- {
- printf($this->webmaster_confirm, $this->recipient);
- }
- }
- }
- }//end of function webmaster_notify
- function database_put($variable_array)
- {
- $db = &new UFMdb;
- $db->connect($this->database);
- $new = MailMerge::clean_array($variable_array, $this->p_vars);
- foreach($variable_array as $vv)
- {
- if(isset($this->p_vars[$vv]) && $this->p_vars[$vv] != "")
- {
- $first_part .= $vv . ", ";
- }
- }
- foreach($new as $ne=>$va)
- {
- if(isset($va) && $va != "")
- {
- $va = mysql_real_escape_string($va);
- $second_part .= "'" . $va . "', ";
- }
- }
- $sql = "INSERT INTO " . $this->database['table'] . " (" . substr($first_part, 0 , -2) . ") VALUES (" . substr($second_part, 0, -2) . ")";
- //print $sql;
- $db->query($sql);
- }//end of database_put()
- function thanks_page()
- {
- if($this->redirect != "" && (!isset($this->error_message)))
- {
- $page = $this->redirect;
- header("Location: $page");
- exit;
- }
- }//end of function thanks_page
- /******************************/
- // function to check the banlist
- function check_banlist($email)
- {
- $allow = 0;
- if (count($this->banlist))
- {
- $allow = true;
- foreach($this->banlist as $banned)
- {
- $temp = explode("@", $banned);
- if ($temp[0] == "*")
- {
- $temp2 = explode("@", $email);
- if(count($temp2) == '2')
- {
- if (trim(strtolower($temp2[1])) == trim(strtolower($temp[1])))
- {
- $allow = 0;
- }
- }
- }
- else {
- if (trim(strtolower($email)) == trim(strtolower($banned)))
- {
- $allow = 0;
- }
- }
- }
- }
- return $allow;
- }//end check_banlist function
- /************************************/
- function check_files($files)
- {
- $no = 1;
- $total_size = '0';
- foreach($files as $key=>$value)
- {
- $size = (int) $value['size']/1024;
- $total_size = $size + $total_size;
- $name = $value['name'];
- $test = explode(".", $value['name']);
- $last_part = count($test)-1;
- $ext = $test[$last_part];
- if(in_array($ext, $this->banned_ext))
- {
- $this->error_message = sprintf($this->file_type_error, $ext);
- break;
- }
- if($size > $this->file_max_size)
- {
- $this->error_message = sprintf($this->file_size_error, $size, $this->file_max_size);
- break;
- }
- if($total_size > $this->file_max_size_total)
- {
- $this->error_message = sprintf($this->total_file_size_error, $total_size, $this->file_max_size_total);
- break;
- }
- $attach['name'] = $name;
- $attach['tmp_name'] = $value['tmp_name'];
- $attach['size'] = $size;
- $attachment[] = $attach;
- if($name != '') {
- $this->webmaster_body .= sprintf($this->post_info, 'File - '.$no, $name);
- $no++;
- }
- }//end of foreach files
- $this->total_attachment_size = $total_size;
- }//end of check_files function
- /**************************************/
- function file_save()
- {
- if(isset($this->p_file) && $this->p_file != "")
- {
- foreach($this->p_file as $pkey=>$pvalue)
- {
- if(isset($pvalue['tmp_name']) && $pvalue['name'] != "")
- {
- if (!@move_uploaded_file($pvalue['tmp_name'], $this->file_save_dir . '/' . $this->file_name_array[$pkey]))
- {
- // error moving file. check file permissions.
- unlink($file_tmp);
- $this->error_message = "Unable to move file to designated directory.<br>";
- }
- else
- {
- /****/
- /*add file name to db and post variables*/
- /***/
- //$file_name_array_tmp = array('file_name'=>$pvalue['name']);
- /*$file_name_array_tmp = array($pkey);
- $this->keep_these = array_merge($this->keep_these, $file_name_array_tmp);
- $file_name_array_tmp = array($pkey=>$this->file_upload_name);
- $this->p_vars = array_merge($this->p_vars, $file_name_array_tmp);*/
- //unlink($pvalue['tmp_name']);
- }
- }
- }
- }
- }//end of file_save()
- /****************************************/
- function convert_language($html, $language)
- {
- if($html)
- //if($html)
- {
- $lang = str_replace("\n", "<br>", $language);
- }
- else
- {
- $lang = str_replace("<br><br>", '
- ', $language);
- $lang = str_replace('<br>','', $lang);
- }
- return $lang;
- }//end of convert language function
- function dataCleaner($postVars)
- {
- $postKeys = array_keys($postVars);
- if(is_array($this->onlyAllow))
- {
- $postKeeper = array_intersect($this->onlyAllow, $postKeys);
- }
- else
- {
- $postKeeper = $postKeys;
- }
- /*************/
- foreach($postKeeper as $pk)
- {
- if(!is_array($postVars[$pk]))
- {
- if(isset($this->lengthSpecifics[$pk]) && is_array($this->lengthSpecifics) && $this->lengthSpecifics[$pk] != '')
- {
- $one[$pk] = substr($postVars[$pk],0,$this->lengthSpecifics[$pk]);
- }
- else
- {
- $one[$pk] = substr($postVars[$pk],0,$this->lengthDefault);
- }
- if(!in_array($pk, $this->emailFieldValues))
- {
- $two[$pk] = str_replace('@','[at-symbol]',$one[$pk]);
- }
- else
- {
- $bad = array("\r","\n");
- $good = '[carriage-return]';
- $two[$pk] = str_replace($bad, $good ,$one[$pk]);
- if(substr_count($two[$pk], '@') > 1)
- {
- $this->error_message .= 'Sending more than one email is not allowed';
- }
- }
- }
- /****************/
- else
- {/*pk is array*/
- foreach($postVars[$pk] as $apk)
- {
- if(isset($this->lengthSpecifics[$pk]) && is_array($this->lengthSpecifics) && $this->lengthSpecifics[$pk] != '')
- {
- $carr[] = substr($apk,0,$this->lengthSpecifics[$pk]);
- }
- else
- {
- $carr[] = substr($apk,0,$this->lengthDefault);
- }
- }//foreach apk
- $one[$pk] = $carr;
- unset($carr);
- foreach($one[$pk] as $opk)
- {
- if(!in_array($pk, $this->emailFieldValues))
- {
- $two[$pk][] = str_replace('@','[at-symbol]',$opk);
- }
- else
- {
- $bad = array("\r","\n");
- $good = '[carriage-return]';
- $cr = str_replace($bad, $good ,$opk);
- if(substr_count($cr, '@') > 1)
- {
- $this->error_message .= 'Sending more than one email is not allowed';
- }
- else
- {
- $two[$pk][] = $cr;
- }
- }
- }//foreach opk
- }//end of pk is array
- }//foreach pk
- return $two;
- }//end of dataCleaner()
- function antiSpam() {
- session_start();
- $antiS = FALSE;
- if(isset($_SESSION[$this->tokenName]) && $_SESSION[$this->tokenName] != '' && isset($_POST[$this->tokenPostName]) && $_POST[$this->tokenPostName] != '')
- {
- if($_SESSION[$this->tokenName] == md5($_POST[$this->tokenPostName].$_SESSION[$this->tokenTimeStamp]))
- {
- $debugCompare = md5($_POST[$this->tokenPostName].$_SESSION[$this->tokenTimeStamp]);
- /*Now we check to see if there is a time limit on sending form data
- and if so, check to see if too much time has passed*/
- if(isset($_SESSION[$this->timeToLive]) && $_SESSION[$this->timeToLive] != '' && $_SESSION[$this->timeToLive] != 0)
- {
- //ttl is a value we need to compare against the session info
- if(isset($_SESSION[$this->tokenTimeStamp]) && $_SESSION[$this->tokenTimeStamp] != '' && ($_SESSION[$this->tokenTimeStamp] + $_SESSION[$this->timeToLive]) > time())
- {
- $antiS = TRUE;
- }
- }
- else
- {
- $antiS = TRUE;
- }//end of no ttl or ttl = 0
- }
- }
- if(!$antiS)
- {
- $this->error_message .= $this->token_error;
- }
- }//end of antiSpam()
- function formatEmailContent($kd) {
- if($this->convertUnderscore == 1)
- {
- $kd = str_replace('_', ' ', $kd);
- }
- if($this->convertDash == 1)
- {
- $kd = str_replace('-', ' ', $kd);
- }
- switch($this->formatStyle)
- {
- case 1:
- //Title case
- $kd = ucwords(strtolower($kd));
- break;
- case 2:
- //Sentence case
- $kd = ucfirst(strtolower($kd));
- break;
- case 3:
- //Upper all
- $kd = strtoupper($kd);
- break;
- default:
- //nothing
- break;
- }//switch
- return $kd;
- }//function formatEmailContent
- function mailList($postVars) {
- if($this->mail_list != '')/*Should already be set*/
- {
- if(@include 'includes/Snoopy.class.php'){
- $snoopy = new Snoopy;
- $submit_url = $this->mail_list_url;
- $snoopy->submit($submit_url,$postVars);
- }//end of successful include
- else
- {
- /*possible error reporting here*/
- }
- return;
- }//if mail_list
- }//end of mailList()
- function extra_perform($fileToUse){
- if(is_file($fileToUse))
- {
- @include($fileToUse);
- }
- return;
- }//end of extra_perform
- function confirmationPage() {
- if(!$this->confirmButton || $this->confirmButton == '')
- {
- $label = 'Confirm';
- }
- else
- {
- $label = $this->confirmButton;
- }
- $hidden = '<input type="hidden" name="confirmFinal" value="1" />';
- if($this->tokenPostName && $this->tokenPostName != '' && isset($_POST[$this->tokenPostName]) && $_POST[$this->tokenPostName] != '') {
- $hidden .= '<input type="hidden" name="'.$this->tokenPostName.'" value="'.htmlspecialchars($_POST[$this->tokenPostName]).'" />';
- }
- foreach($this->p_vars as $k=>$v)
- {
- if(!in_array($k, $this->keep_these)) continue;
- if(!is_array($v)) {
- $confirmation .= $k .' » '.$v.'<br />
- ';
- $hidden .= '<input type="hidden" name="'.$k.'" value="'.htmlspecialchars($v).'" />
- ';
- }
- else
- {
- foreach($v as $kk=>$vv) {
- $num = $kk + 1;
- $confirmation .= $k .'-'.$num.' » '.$vv.'<br />
- ';
- $hidden .= '<input type="hidden" name="'.$k.'[]" value="'.$vv.'" />
- ';
- }
- }
- }
- $formAction = $_SERVER['PHP_SELF'];
- if(isset($_GET['cid']) && $_GET['cid'] != ''){
- $formAction .= '?cid='.$_GET['cid'];
- }
- $confirmationContent = '<form action="'.$formAction.'" method="post" enctype="multipart/form-data" name="form1" id="form1">
- '.$confirmation.'
- <input type="submit" name="Submit" value="'.$label.'" />
- '.$hidden.'</form>';
- $gen = array('email_content');
- $this->confirm_array = array_merge($this->keep_these, $gen);
- $mail_merge = array('email_content' => $confirmationContent);
- $tpl = & new MailMerge('');
- $tpl->set('email_content', $confirmationContent);
- session_start();
- echo $tpl->plug($this->confirmation_template, $this->confirm_array, $mail_merge);
- exit;
- }//end of confirmationPage
- }//end of class
- /*=============
- Leave these next several lines alone
- ==============*/
- $obj = new UFMail;
- $obj->initialize($set); //Gets things going
- $obj->check_vars(); //Runs the error checking
- $obj->branch(); //Sends the emails
- $obj->thanks_page(); /* Redirects if the corresponding variable is set */
- ?>
Add Comment
Please, Sign In to add comment