[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@18.217.128.174: ~ $
<?php

require_once __DIR__.'/accesscheck.php';
require __DIR__.'/class.phplistmailerbase.php';

class phplistMailer extends phplistMailerBase
{
    // Inherited properties
    public $XMailer = ' ';  // disables `X-Mailer' header
    public $WordWrap = 75;

    // Additional properties
    public $messageid = 0;
    public $destinationemail = '';

    private $timeStamp = '';
    private $inBlast = false;
    private $image_types = array(
        'gif'  => 'image/gif',
        'jpg'  => 'image/jpeg',
        'jpeg' => 'image/jpeg',
        'jpe'  => 'image/jpeg',
        'bmp'  => 'image/bmp',
        'png'  => 'image/png',
        'tif'  => 'image/tiff',
        'tiff' => 'image/tiff',
        'swf'  => 'application/x-shockwave-flash',
    );

    public function __construct($messageid, $email, $inBlast = true, $exceptions = false)
    {
        parent::__construct($exceptions);
        $this->addCustomHeader('X-phpList-version', VERSION);
        $this->addCustomHeader('X-MessageID', $messageid);
        $this->addCustomHeader('X-ListMember', $email);
        if (GOOGLE_SENDERID != '') {
            $this->addCustomHeader('Feedback-ID', "$messageid:".GOOGLE_SENDERID);
        }

        //# amazon SES doesn't like this
        /*
         * http://mantis.phplist.com/view.php?id=15562
         * Interesting, https://mantis.phplist.com/view.php?id=16688
         * says Gmail wants it. Everyone's confused.
         *
         * Also, are we "Precedence: bulk, or Precedence: list"
         *
         * I guess this should become configurable, to leave the choice up to the installation,
         * but what would be our default?
         *
              if (!USE_AMAZONSES) {
        #        $this->addCustomHeader("Precedence: bulk");
              }
              *
              * ok, decided:
        */

        if (!USE_AMAZONSES && USE_PRECEDENCE_HEADER) {
            $this->addCustomHeader('Precedence', 'bulk');
        }

        $newwrap = getConfig('wordwrap');
        if ($newwrap) {
            $this->WordWrap = $newwrap;
        }
        if (defined('SMTP_TIMEOUT')) {
            $this->Timeout = sprintf('%d', SMTP_TIMEOUT);
        }

        $this->destinationemail = $email;
        $this->SingleTo = false;
        $this->CharSet = 'UTF-8'; // getConfig("html_charset");
        $this->inBlast = $inBlast;
        //## hmm, would be good to sort this out differently, but it'll work for now
        //# don't send test message using the blast server
        if (isset($_GET['page']) && $_GET['page'] == 'send') {
            $this->inBlast = false;
        }
        $this->Helo = getConfig('domain');

        if ($GLOBALS['emailsenderplugin']) {
            $this->Mailer = 'plugin';
        } elseif (!$this->inBlast && empty($_SESSION['adminloggedin']) && 
            defined('PHPMAILERSUBSCRIBEHOST') && 
            defined('PHPMAILERSUBSCRIBEPORT') && PHPMAILERSUBSCRIBEHOST != '') {
#            logEvent('Sending email via PHPMAILERSUBSCRIBEHOST '.PHPMAILERSUBSCRIBEHOST);
            $this->Host = PHPMAILERSUBSCRIBEHOST;
            $this->Port = PHPMAILERSUBSCRIBEPORT;
            if (isset($GLOBALS['phpmailer_smtpuser']) && $GLOBALS['phpmailer_smtpuser'] != ''
                && isset($GLOBALS['phpmailer_smtppassword']) && $GLOBALS['phpmailer_smtppassword']
            ) {
                $this->Username = $GLOBALS['phpmailer_smtpuser'];
                $this->Password = $GLOBALS['phpmailer_smtppassword'];
                $this->SMTPAuth = true;
            }
            $this->Mailer = 'smtp';
        } elseif ($this->inBlast && defined('PHPMAILERBLASTHOST') && defined('PHPMAILERBLASTPORT') && PHPMAILERBLASTHOST != '') {
            $this->Host = PHPMAILERBLASTHOST;
            $this->Port = PHPMAILERBLASTPORT;
            if (isset($GLOBALS['phpmailer_smtpuser']) && $GLOBALS['phpmailer_smtpuser'] != ''
                && isset($GLOBALS['phpmailer_smtppassword']) && $GLOBALS['phpmailer_smtppassword']
            ) {
                $this->Username = $GLOBALS['phpmailer_smtpuser'];
                $this->Password = $GLOBALS['phpmailer_smtppassword'];
                $this->SMTPAuth = true;
            }
            $this->Mailer = 'smtp';
        } elseif (!$this->inBlast && defined('PHPMAILERTESTHOST') && PHPMAILERTESTHOST != '') {
            if (defined('PHPMAILERPORT')) {
                $this->Port = PHPMAILERPORT;
            }
#            logEvent('Sending email via PHPMAILERTESTHOST '.PHPMAILERTESTHOST);
            $this->Host = PHPMAILERTESTHOST;
            if (isset($GLOBALS['phpmailer_smtpuser']) && $GLOBALS['phpmailer_smtpuser'] != ''
                && isset($GLOBALS['phpmailer_smtppassword']) && $GLOBALS['phpmailer_smtppassword']
            ) {
                $this->Username = $GLOBALS['phpmailer_smtpuser'];
                $this->Password = $GLOBALS['phpmailer_smtppassword'];
                $this->SMTPAuth = true;
            }
            $this->Mailer = 'smtp';
        } elseif (defined('PHPMAILERHOST') && PHPMAILERHOST != '') {
            if (defined('PHPMAILERPORT')) {
                $this->Port = PHPMAILERPORT;
            }
            //logEvent('Sending email via '.PHPMAILERHOST);
            $this->Host = PHPMAILERHOST;
#            logEvent('Sending email via PHPMAILERHOST '.PHPMAILERHOST);
            if (POP_BEFORE_SMTP) {
                // authenticate using the smtp user and password
                $pop = new POP3();

                if (!$pop->authorise(PHPMAILERHOST, $this->Port, 30, $GLOBALS['phpmailer_smtpuser'], $GLOBALS['phpmailer_smtppassword'], 1)) {
                    // unable to authenticate, there might be an error message in $pop->getErrors()
                    $poperror = $pop->getErrors();

                    if (POPBEFORESMTP_DEBUG) {
                        $this->SMTPDebug = 2;
                        //Ask for HTML-friendly debug output
                        $this->Debugoutput = 'html';
                    }
                }

            } else {
                // the existing smtp code
                if (isset($GLOBALS['phpmailer_smtpuser']) && $GLOBALS['phpmailer_smtpuser'] != ''
                    && isset($GLOBALS['phpmailer_smtppassword']) && $GLOBALS['phpmailer_smtppassword']
                ) {
                    $this->Username = $GLOBALS['phpmailer_smtpuser'];
                    $this->Password = $GLOBALS['phpmailer_smtppassword'];
                    $this->SMTPAuth = true;
                }
            }
        $this->Mailer = 'smtp';
        } elseif (USE_AMAZONSES) {
            $this->Mailer = 'amazonSes';
        } elseif (USE_LOCAL_SPOOL && is_dir(USE_LOCAL_SPOOL) && is_writable(USE_LOCAL_SPOOL)) {
            $this->Mailer = 'localSpool';
        } else {
            $this->isMail();
        }
        if (empty($_SERVER['SERVER_NAME']) || empty($this->Hostname)) {
            $this->Hostname = getConfig('domain');
        }

        $this->SMTPAutoTLS = true;
        if (defined('PHPMAILER_SECURE') && PHPMAILER_SECURE) {
            if (PHPMAILER_SECURE != 'auto') { // auto is already on
                $this->SMTPSecure = PHPMAILER_SECURE;
            }
        } elseif (defined('PHPMAILER_SECURE') && !PHPMAILER_SECURE) {
            //#18115 allow switching AutoTLS off, when using insecure and untrusted (self signed) certificates
            $this->SMTPSecure = '';
            $this->SMTPAutoTLS = false;
        }

        if (isset($GLOBALS['phpmailer_smtpoptions'])) {
            $this->SMTPOptions = $GLOBALS['phpmailer_smtpoptions'];
        }

        if ($GLOBALS['message_envelope']) {
            $this->Sender = $GLOBALS['message_envelope'];

//# one to work on at a later stage
//        $this->addCustomHeader("Return-Receipt-To: ".$GLOBALS["message_envelope"]);
        }
        //# when the email is generated from a webpage (quite possible :-) add a "received line" to identify the origin
        if (!empty(getClientIP())) {
            $this->add_timestamp();
        }
        $this->messageid = $messageid;
    }

    public function add_html($html, $text = '', $templateid = 0)
    {
        $this->Body = $html;
        $this->IsHTML(true);
        if ($text) {
            $this->add_text($text);
        }
        $this->Encoding = HTMLEMAIL_ENCODING;
        $this->find_html_images($templateid);
    }

    public function add_timestamp()
    {
        //0013076:
        // Add a line like Received: from [10.1.2.3] by website.example.com with HTTP; 01 Jan 2003 12:34:56 -0000
        // more info: http://www.spamcop.net/fom-serve/cache/369.html
        $ip_address = getClientIP();
        if (!empty($_SERVER['REMOTE_HOST'])) {
            $ip_domain = $_SERVER['REMOTE_HOST'];
        } else {
            $ip_domain = gethostbyaddr($ip_address);
        }
        if ($ip_domain != $ip_address) {
            $from = "$ip_domain [$ip_address]";
        } else {
            $from = "[$ip_address]";
        }
        $hostname = hostName();
        $request_time = date('r', $_SERVER['REQUEST_TIME']);
        $sTimeStamp = "from $from by $hostname with HTTP; $request_time";
        $this->addTimeStamp($sTimeStamp);
    }

    public function AddTimeStamp($sTimeStamp)
    {
        $this->timeStamp = $sTimeStamp;
    }

    public function add_text($text)
    {
        if (!$this->Body) {
            $this->IsHTML(false);
            $this->Body = html_entity_decode($text, ENT_QUOTES, 'UTF-8'); //$text;
        } else {
            $this->AltBody = html_entity_decode($text, ENT_QUOTES, 'UTF-8'); //$text;
        }
    }

    public function append_text($text)
    {
        if ($this->AltBody) {
            $this->AltBody .= html_entity_decode($text, ENT_QUOTES, 'UTF-8'); //$text;
        } else {
            $this->Body .= html_entity_decode($text."\n", ENT_QUOTES, 'UTF-8'); //$text;
        }
    }

    public function CreateHeader()
    {
        $parentheader = parent::CreateHeader();
        if (!empty($this->timeStamp)) {
            $header = 'Received: '.$this->timeStamp.$this->lineEnding.$parentheader;
        } else {
            $header = $parentheader;
        }

        return $header;
    }

    public function compatSend(
        $to_name,
        $to_addr,
        $from_name,
        $from_addr,
        $subject = ''
    ) {
        if (!empty($from_addr) && method_exists($this, 'SetFrom')) {
            $this->SetFrom($from_addr, $from_name);
        } else {
            $this->From = $from_addr;
            $this->FromName = $from_name;
        }
        if (!empty($GLOBALS['developer_email'])) {
            // make sure we are not sending out emails to real users
            // when developing
            $this->AddAddress($GLOBALS['developer_email']);
            if ($GLOBALS['developer_email'] != $to_addr) {
                $this->Body = 'X-Originally to: '.$to_addr."\n\n".$this->Body;
            }
        } else {
            $this->AddAddress($to_addr);
        }
        $this->Subject = $subject;
        if ($this->Body) {
            //# allow plugins to add header lines
            foreach ($GLOBALS['plugins'] as $pluginname => $plugin) {
                //    print "Checking Destination for ".$plugin->name."<br/>";
                $pluginHeaders = $plugin->messageHeaders($this);
                if ($pluginHeaders && count($pluginHeaders)) {
                    foreach ($pluginHeaders as $headerItem => $headerValue) {
                        //# @@TODO, do we need to sanitise them?
                        $this->addCustomHeader($headerItem, $headerValue);
                    }
                }
            }
            if (!parent::send()) {
                logEvent(s('Error sending email to %s', $to_addr).' '.$this->ErrorInfo);

                return 0;
            }
        } else {
            logEvent(s('Error, empty message-body sending email to %s', $to_addr));

            return 0;
        }

        return 1;
    }

    public function add_attachment($contents, $filename, $mimetype)
    {
        $this->AddStringAttachment($contents, $filename, 'base64', $mimetype);
    }

    public function find_html_images($templateid)
    {
        //if (!$templateid) return;
        //# no template can be templateid 0, find the powered by image
        $templateid = sprintf('%d', $templateid);

        // Build the list of image extensions
        $extensions = implode('|', array_keys($this->image_types));
        $html_images = array();
        $filesystem_images = array();

        //# addition for external images
        if (defined('EMBEDEXTERNALIMAGES') && EMBEDEXTERNALIMAGES) {
            $external_images = array();
            $matched_images = array();
            $pattern = sprintf(
                '~="(https?://(?!%s)([^"]+\.(%s))([\\?/][^"]+)?)"~Ui',
                preg_quote(getConfig('website')),
                $extensions
            );
            preg_match_all($pattern, $this->Body, $matched_images);

            for ($i = 0; $i < count($matched_images[1]); ++$i) {
                if ($this->external_image_exists($matched_images[1][$i])) {
                    $external_images[] = $matched_images[1][$i].'~^~'.basename($matched_images[2][$i]).'~^~'.strtolower($matched_images[3][$i]);
                }
            }

            if (!empty($external_images)) {
                $external_images = array_unique($external_images);

                for ($i = 0; $i < count($external_images); ++$i) {
                    $external_image = explode('~^~', $external_images[$i]);

                    if ($image = $this->get_external_image($external_image[0])) {
                        $content_type = $this->image_types[$external_image[2]];
                        $cid = $this->add_html_image($image, $external_image[1], $content_type);

                        if (!empty($cid)) {
                            $this->Body = str_replace($external_image[0], 'cid:'.$cid, $this->Body);
                        }
                    }
                }
            }
        }
        //# end addition

        preg_match_all('/"([^"]+\.('.$extensions.'))"/Ui', $this->Body, $images);

        for ($i = 0; $i < count($images[1]); ++$i) {
            if ($this->image_exists($templateid, $images[1][$i])) {
                $html_images[] = $images[1][$i];
                $this->Body = str_replace($images[1][$i], basename($images[1][$i]), $this->Body);
            }
            //# addition for filesystem images
            if (EMBEDUPLOADIMAGES) {
                if ($this->filesystem_image_exists($images[1][$i])) {
                    $filesystem_images[] = $images[1][$i];
                    $this->Body = str_replace($images[1][$i], basename($images[1][$i]), $this->Body);
                }
            }
            //# end addition
        }
        if (!empty($html_images)) {
            // If duplicate images are embedded, they may show up as attachments, so remove them.
            $html_images = array_unique($html_images);
            sort($html_images);
            for ($i = 0; $i < count($html_images); ++$i) {
                if ($image = $this->get_template_image($templateid, $html_images[$i])) {
                    $content_type = $this->image_types[strtolower(substr($html_images[$i],
                        strrpos($html_images[$i], '.') + 1))];
                    $cid = $this->add_html_image($image, basename($html_images[$i]), $content_type);
                    if (!empty($cid)) {
                        $this->Body = str_replace(basename($html_images[$i]), "cid:$cid", $this->Body);
                    }
                }
            }
        }
        //# addition for filesystem images
        if (!empty($filesystem_images)) {
            // If duplicate images are embedded, they may show up as attachments, so remove them.
            $filesystem_images = array_unique($filesystem_images);
            sort($filesystem_images);
            for ($i = 0; $i < count($filesystem_images); ++$i) {
                if ($image = $this->get_filesystem_image($filesystem_images[$i])) {
                    $content_type = $this->image_types[strtolower(substr($filesystem_images[$i],
                        strrpos($filesystem_images[$i], '.') + 1))];
                    $cid = $this->add_html_image($image, basename($filesystem_images[$i]), $content_type);
                    if (!empty($cid)) {
                        $this->Body = str_replace(basename($filesystem_images[$i]), "cid:$cid", $this->Body); //@@@
                    }
                }
            }
        }
        //# end addition
    }

    public function add_html_image($contents, $name = '', $content_type = 'application/octet-stream')
    {
        $cid = bin2hex(random_bytes(16)); // @TODO seems this does not need to be random, just unique? perhaps hash($contents)
        $this->AddStringEmbeddedImage(base64_decode($contents), $cid, $name, 'base64', $content_type);

        return $cid;
    }

    //# addition for filesystem images

    public function filesystem_image_exists($filename)
    {
        //#  find the image referenced and see if it's on the server
        $imageroot = getConfig('uploadimageroot');
//      cl_output('filesystem_image_exists '.$docroot.' '.$filename);

        $elements = parse_url($filename);
        $localfile = basename($elements['path']);

        $localfile = urldecode($localfile);
        //     cl_output('CHECK'.$localfile);

        if (defined('UPLOADIMAGES_DIR')) {
            //  print $_SERVER['DOCUMENT_ROOT'].$localfile;
            return
                is_file($_SERVER['DOCUMENT_ROOT'].'/'.UPLOADIMAGES_DIR.'/image/'.$localfile)
                || is_file($_SERVER['DOCUMENT_ROOT'].'/'.UPLOADIMAGES_DIR.'/'.$localfile)
                //# commandline
                || is_file($imageroot.'/'.$localfile);
        } else {
            return
                is_file($_SERVER['DOCUMENT_ROOT'].$GLOBALS['pageroot'].'/'.FCKIMAGES_DIR.'/image/'.$localfile)
                || is_file($_SERVER['DOCUMENT_ROOT'].$GLOBALS['pageroot'].'/'.FCKIMAGES_DIR.'/'.$localfile)
                //# commandline
                || is_file('../'.FCKIMAGES_DIR.'/image/'.$localfile)
                || is_file('../'.FCKIMAGES_DIR.'/'.$localfile);
        }
    }

    public function get_filesystem_image($filename)
    {
        //# get the image contents
        $localfile = basename(urldecode($filename));
//      cl_output('get file system image'.$filename.' '.$localfile);
        if (defined('UPLOADIMAGES_DIR')) {
            //       print 'UPLOAD';
            $imageroot = getConfig('uploadimageroot');
            if (is_file($imageroot.$localfile)) {
                return base64_encode(file_get_contents($imageroot.$localfile));
            } else {
                if (is_file($_SERVER['DOCUMENT_ROOT'].$localfile)) {
                    //# save the document root to be able to retrieve the file later from commandline
                    SaveConfig('uploadimageroot', $_SERVER['DOCUMENT_ROOT'], 0, 1);

                    return base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'].$localfile));
                } elseif (is_file($_SERVER['DOCUMENT_ROOT'].'/'.UPLOADIMAGES_DIR.'/image/'.$localfile)) {
                    SaveConfig('uploadimageroot', $_SERVER['DOCUMENT_ROOT'].'/'.UPLOADIMAGES_DIR.'/image/', 0, 1);

                    return base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'].'/'.UPLOADIMAGES_DIR.'/image/'.$localfile));
                } elseif (is_file($_SERVER['DOCUMENT_ROOT'].'/'.UPLOADIMAGES_DIR.'/'.$localfile)) {
                    SaveConfig('uploadimageroot', $_SERVER['DOCUMENT_ROOT'].'/'.UPLOADIMAGES_DIR.'/', 0, 1);

                    return base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'].'/'.UPLOADIMAGES_DIR.'/'.$localfile));
                }
            }
        } elseif (is_file($_SERVER['DOCUMENT_ROOT'].$GLOBALS['pageroot'].'/'.FCKIMAGES_DIR.'/'.$localfile)) {
            $elements = parse_url($filename);
            $localfile = basename($elements['path']);

            return base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'].$GLOBALS['pageroot'].'/'.FCKIMAGES_DIR.'/'.$localfile));
        } elseif (is_file($_SERVER['DOCUMENT_ROOT'].$GLOBALS['pageroot'].'/'.FCKIMAGES_DIR.'/image/'.$localfile)) {
            return base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'].$GLOBALS['pageroot'].'/'.FCKIMAGES_DIR.'/image/'.$localfile));
        } elseif (is_file('../'.FCKIMAGES_DIR.'/'.$localfile)) {   //# commandline
            return base64_encode(file_get_contents('../'.FCKIMAGES_DIR.'/'.$localfile));
        } elseif (is_file('../'.FCKIMAGES_DIR.'/image/'.$localfile)) {
            return base64_encode(file_get_contents('../'.FCKIMAGES_DIR.'/image/'.$localfile));
        }

        return '';
    }

    //# end addition

    //# addition for external images

    public function external_image_exists($filename)
    {
        // Check for a http(s) address excluding this host
        if ((strpos($filename, 'http') === 0) && (strpos($filename, '://'.getConfig('website').'/') === false)) {
            $extCacheDir = $GLOBALS['tmpdir'].'/external_cache';

            // Create cache directory
            if (!file_exists($extCacheDir)) {
                @mkdir($extCacheDir);
            }

            if (file_exists($extCacheDir) && is_writable($extCacheDir)) {
                // Remove old files in cache directory
                if (defined('EXTERNALIMAGE_MAXAGE') && EXTERNALIMAGE_MAXAGE && ($extCacheDirHandle = @opendir($extCacheDir))) {
                    while (false !== ($cacheFile = @readdir($extCacheDirHandle))) {
                        if ((strlen($cacheFile) > 0) && (substr($cacheFile, 0, 1) != '.')) {
                            $cacheFileMTime = @filemtime($extCacheDir.'/'.$cacheFile);

                            if (is_numeric($cacheFileMTime) && ($cacheFileMTime > 0) && ((time() - $cacheFileMTime) > EXTERNALIMAGE_MAXAGE)) {
                                @unlink($extCacheDir.'/'.$cacheFile);
                            }
                        }
                    }

                    @closedir($extCacheDirHandle);
                }

                // Generate local filename
                //$cacheFile = $extCacheDir.'/'.$this->messageid.'_'.hash('sha256', $filename);
                $cacheFile = $extCacheDir.'/'.$this->messageid.'_'.preg_replace(array(
                        '~[\.][\.]+~Ui',
                        '~[^\w\.]~Ui',
                    ), array('', '_'), $filename);

                // Download and cache file
                if (!file_exists($cacheFile)) {
                    $cacheFileContent = '';
                    $downloadTimeout = (defined('EXTERNALIMAGE_TIMEOUT') ? EXTERNALIMAGE_TIMEOUT : 30);

                    // Try downloading using cURL
                    if (function_exists('curl_init')) {
                        $cURLHandle = curl_init($filename);

                        if ($cURLHandle !== false) {
                            //curl_setopt($cURLHandle, CURLOPT_URL, $filename);
                            curl_setopt($cURLHandle, CURLOPT_HTTPGET, true);
                            curl_setopt($cURLHandle, CURLOPT_HEADER, 0);
                            curl_setopt($cURLHandle, CURLOPT_BINARYTRANSFER, true);
                            curl_setopt($cURLHandle, CURLOPT_RETURNTRANSFER, true);
                            //curl_setopt($cURLHandle, CURLOPT_FILE, $cacheFileHandle);
                            curl_setopt($cURLHandle, CURLOPT_TIMEOUT, $downloadTimeout);
                            curl_setopt($cURLHandle, CURLOPT_FOLLOWLOCATION, true);
                            curl_setopt($cURLHandle, CURLOPT_MAXREDIRS, 10);
                            curl_setopt($cURLHandle, CURLOPT_SSL_VERIFYPEER, false);
                            curl_setopt($cURLHandle, CURLOPT_FAILONERROR, true);

                            $cacheFileContent = curl_exec($cURLHandle);

                            $cURLErrNo = curl_errno($cURLHandle);
                            $cURLInfo = curl_getinfo($cURLHandle);

                            curl_close($cURLHandle);

                            if ($cURLErrNo != 0) {
                                $cacheFileContent = 'CURL_ERROR_'.$cURLErrNo;
                            }
                            if ($cURLInfo['http_code'] >= 400) {
                                $cacheFileContent = 'HTTP_CODE_'.$cURLInfo['http_code'];
                            }
                        }
                    }

                    // Try downloading using file_get_contents
                    if ($cacheFileContent == '') {
                        $remoteURLContext = stream_context_create(array(
                            'http' => array(
                                'method'        => 'GET',
                                'timeout'       => $downloadTimeout,
                                'max_redirects' => '10',
                            ),
                        ));

                        $cacheFileContent = file_get_contents($filename, false, $remoteURLContext);
                        if ($cacheFileContent === false) {
                            $cacheFileContent = 'FGC_ERROR';
                        }
                    }

                    // Limit size
                    if (defined('EXTERNALIMAGE_MAXSIZE') && EXTERNALIMAGE_MAXSIZE && (strlen($cacheFileContent) > EXTERNALIMAGE_MAXSIZE)) {
                        $cacheFileContent = 'MAX_SIZE';
                    }

                    // Write cache file
                    //file_put_contents($cacheFile, $cacheFileContent, LOCK_EX);
                    $cacheFileHandle = @fopen($cacheFile, 'wb');
                    if ($cacheFileHandle !== false) {
                        if (flock($cacheFileHandle, LOCK_EX)) {
                            fwrite($cacheFileHandle, $cacheFileContent);
                            fflush($cacheFileHandle);
                            flock($cacheFileHandle, LOCK_UN);
                        }
                        fclose($cacheFileHandle);
                    }
                }

                if (file_exists($cacheFile) && (@filesize($cacheFile) > 64)) {
                    return true;
                }
            }
        }
    }

    public function get_external_image($filename)
    {
        $extCacheDir = $GLOBALS['tmpdir'].'/external_cache';
        //$cacheFile = $extCacheDir.'/'.$this->messageid.'_'.hash('sha256', $filename);
        $cacheFile = $extCacheDir.'/'.$this->messageid.'_'.preg_replace(array('~[\.][\.]+~Ui', '~[^\w\.]~Ui'),
                array('', '_'), $filename);

        if (file_exists($cacheFile) && (@filesize($cacheFile) > 64)) {
            return base64_encode(file_get_contents($cacheFile));
        }
    }

    //# end addition

    public function image_exists($templateid, $filename)
    {
        if (basename($filename) == 'powerphplist.png' || strpos($filename, 'ORGANISATIONLOGO') === 0) {
            $templateid = 0;
        }
        $req = Sql_Query(sprintf('select * from %s where template = %d and (filename = "%s" or filename = "%s")',
            $GLOBALS['tables']['templateimage'], $templateid, $filename, basename($filename)));

        return Sql_Affected_Rows();
    }

    public function get_template_image($templateid, $filename)
    {
        if (basename($filename) == 'powerphplist.png' || strpos($filename, 'ORGANISATIONLOGO') === 0) {
            $templateid = 0;
        }
        $req = Sql_Fetch_Row_Query(sprintf('select data from %s where template = %d and (filename = "%s" or filename = "%s")',
            $GLOBALS['tables']['templateimage'], $templateid, $filename, basename($filename)));

        return $req[0];
    }

    public function EncodeFile($path, $encoding = 'base64')
    {
        // as we already encoded the contents in $path, return $path
        return chunk_split($path, 76, $this->lineEnding);
    }

    /**
     * Called by phpmailer when $Mailer is set to amazonSes.
     * Builds and sends an email through Amazon SES.
     * The curl handle is persisted and closed only when an error occurs.
     *
     * @param string $header the message http headers
     * @param string $body   the message body
     *
     * @return bool whether the email was sent successfully
     */
    public function amazonSesSend($header, $body)
    {
        static $curl = null;

        if ($curl === null) {
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, AWS_POSTURL);
            curl_setopt($curl, CURLOPT_TIMEOUT, 30);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_HEADER, 1);
            curl_setopt($curl, CURLOPT_DNS_USE_GLOBAL_CACHE, true);
            curl_setopt($curl, CURLOPT_USERAGENT, NAME.' (phpList version '.VERSION.', https://www.phplist.com/)');
            curl_setopt($curl, CURLOPT_POST, 1);
        }
        $header = rtrim($header, "\r\n ");

        $date = date('r');
        $aws_signature = base64_encode(hash_hmac('sha256', $date, AWS_SECRETKEY, true));

        $requestheader = array(
            'Host: '.parse_url(AWS_POSTURL, PHP_URL_HOST),
            'Content-Type: application/x-www-form-urlencoded',
            'Date: '.$date,
            'X-Amzn-Authorization: AWS3-HTTPS AWSAccessKeyId='.AWS_ACCESSKEYID.',Algorithm=HMACSHA256,Signature='.$aws_signature,
        );
        curl_setopt($curl, CURLOPT_HTTPHEADER, $requestheader);

        $rawmessage = base64_encode($header.$this->lineEnding.$this->lineEnding.$body);
        $requestdata = array(
            'Action'                => 'SendRawEmail',
            'Source'                => $GLOBALS['message_envelope'],
            'Destinations.member.1' => $this->destinationemail,
            'RawMessage.Data'       => $rawmessage,
        );
        $data = http_build_query($requestdata, null, '&');
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

        $res = curl_exec($curl);
        $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

        if ($res === false || $status != 200) {
            $error = curl_error($curl);
            curl_close($curl);
            $curl = null;
            logEvent(sprintf('Amazon SES status: %s, result: %s, curl error: %s', $status, strip_tags($res), $error));

            return false;
        }

        return true;
    }

    /**
     * Called by phpmailer when $Mailer is set to plugin.
     *
     * @param string $header the message http headers
     * @param string $body   the message body
     *
     * @return bool success/failure
     */
    public function pluginSend($header, $body)
    {
        global $emailsenderplugin;

        return $emailsenderplugin->send($this, $header, $body);
    }

    /**
     * Called by phpmailer when $Mailer is set to localSpool.
     *
     * @param string $header the message http headers
     * @param string $body   the message body
     *
     * @return bool success/failure
     */
    public function localSpoolSend($header, $body)
    {
        $fname = tempnam(USE_LOCAL_SPOOL, 'msg');
        file_put_contents($fname, $header."\n".$body);
        file_put_contents($fname.'.S', $this->Sender);

        return true;
    }
}

Filemanager

Name Type Size Permission Actions
PEAR Folder 0755
PHPMailer Folder 0755
PHPMailer6 Folder 0755
actions Folder 0755
css Folder 0755
data Folder 0755
help Folder 0755
images Folder 0755
inc Folder 0755
info Folder 0755
js Folder 0755
locale Folder 0755
onyxrss Folder 0755
plugins Folder 0755
tests Folder 0755
ui Folder 0755
.gitignore File 20 B 0644
.htaccess File 489 B 0644
.minceconf File 994 B 0644
AnalyticsQuery.php File 985 B 0644
CsvReader.php File 1.27 KB 0644
EmailSender.php File 477 B 0644
Updater.php File 193 B 0644
about.php File 7.4 KB 0644
accesscheck.php File 715 B 0644
addprefix.php File 1.01 KB 0644
adduser.php File 46 B 0644
admin.php File 12.77 KB 0644
adminattributes.php File 7.46 KB 0644
admins.php File 5.16 KB 0644
analytics.php File 2.84 KB 0644
attributes.php File 26.2 KB 0644
blacklistemail.php File 1.22 KB 0644
bounce.php File 11.14 KB 0644
bouncemgt.php File 1.44 KB 0644
bouncerule.php File 4.27 KB 0644
bouncerules.php File 6.33 KB 0644
bounces.php File 7.57 KB 0644
catlists.php File 3.34 KB 0644
checkbouncerules.php File 1.43 KB 0644
checki18n.php File 3.13 KB 0644
checkprerequisites.php File 1.62 KB 0644
class.image.inc File 3.9 KB 0644
class.phplistmailer.php File 30.73 KB 0644
class.phplistmailerbase.php File 1.67 KB 0644
community.php File 3.5 KB 0644
communityfeed.php File 2.36 KB 0644
configure.php File 7.85 KB 0644
connect.php File 89.86 KB 0644
convertstats.php File 5.83 KB 0644
converttoutf8.php File 3.78 KB 0644
cron.php File 3.34 KB 0644
date.php File 7.65 KB 0644
dbcheck.php File 3.7 KB 0644
defaultFrontendTexts.php File 9.79 KB 0644
defaultconfig.php File 30.66 KB 0644
defaultplugin.php File 31.59 KB 0644
defaults.php File 3.64 KB 0644
defaultsystemtemplate.php File 15.29 KB 0644
defaulttest.php File 1.23 KB 0644
dlusers.php File 235 B 0644
domainbounces.php File 507 B 0644
domainstats.php File 371 B 0644
editattributes.php File 8.78 KB 0644
editlist.php File 7.4 KB 0644
eventlog.php File 4.68 KB 0644
export.php File 6.86 KB 0644
exportuserdata.php File 8.26 KB 0644
fckphplist.php File 49.84 KB 0644
gchart.php File 903 B 0644
generatebouncerules.php File 5.51 KB 0644
home.php File 6.56 KB 0644
hostedprocessqueuesetup.php File 3.09 KB 0644
htaccess File 311 B 0644
image.php File 2.01 KB 0644
import.php File 2.75 KB 0644
import1.php File 11.09 KB 0644
import2.php File 34.16 KB 0644
import3.php File 22.72 KB 0644
import4.php File 16.86 KB 0644
importadmin.php File 17.08 KB 0644
importsimple.php File 7.32 KB 0644
index.php File 32.82 KB 0644
info.php File 1.07 KB 0644
init.php File 27.36 KB 0644
initialise.php File 12.05 KB 0644
initlanguages.php File 867 B 0644
languages.php File 21.37 KB 0644
lib.php File 86.79 KB 0644
list.php File 11.32 KB 0644
listbounces.php File 4.13 KB 0644
login.php File 6.39 KB 0644
logout.php File 865 B 0644
massremove.php File 2.55 KB 0644
mclicks.php File 7.28 KB 0644
members.php File 19.99 KB 0644
mergeduplicates.php File 4.48 KB 0644
message.php File 9.08 KB 0644
messages.php File 26.27 KB 0644
minify.txt File 201 B 0644
msgbounces.php File 3.4 KB 0644
msgstatus.php File 1.27 KB 0644
mviews.php File 6.27 KB 0644
mysql.inc File 40 B 0644
mysqli.inc File 14.02 KB 0644
pageaction.php File 1.11 KB 0644
phpListAdminAuthentication.php File 6.82 KB 0644
pluginlib.php File 9.43 KB 0644
plugins.php File 17.78 KB 0644
preparesend.php File 669 B 0644
processbounces.php File 35.36 KB 0644
processqueue.php File 3.71 KB 0644
readtestmail.php File 11.59 KB 0644
reconcileusers.php File 27.71 KB 0644
redirecttoupdater.php File 187 B 0644
reindex.php File 1.82 KB 0644
rsslib.php File 3.17 KB 0644
runcommand.php File 583 B 0644
send.php File 6.17 KB 0644
send_core.php File 63.91 KB 0644
sendemaillib.php File 69.84 KB 0644
sendprepared.php File 4.87 KB 0644
sessionlib.php File 2.7 KB 0644
setpermissions.php File 2.08 KB 0644
setup.php File 2.56 KB 0644
spage.php File 4.35 KB 0644
spageedit.php File 19.08 KB 0644
statsmgt.php File 1.23 KB 0644
statsoverview.php File 6.19 KB 0644
stresstest.php File 4.82 KB 0644
structure.php File 29.21 KB 0644
subscribelib2.php File 70.22 KB 0644
subscriberstats.php File 617 B 0644
suppressionlist.php File 1.71 KB 0644
system.php File 795 B 0644
systemstats.php File 5.73 KB 0644
template.php File 16.4 KB 0644
templates.php File 3.01 KB 0644
tests.php File 1.67 KB 0644
uclicks.php File 6.74 KB 0644
update.php File 187 B 0644
updateLib.php File 2.2 KB 0644
updatetlds.php File 358 B 0644
updatetranslation.php File 2.51 KB 0644
upgrade.php File 23.82 KB 0644
user.php File 23.08 KB 0644
usercheck.php File 2.55 KB 0644
userclicks.php File 11.57 KB 0644
userhistory.php File 8.25 KB 0644
usermgt.php File 1.9 KB 0644
users.php File 19.3 KB 0644
vCard.php File 1.9 KB 0644
viewmessage.php File 635 B 0644
viewtemplate.php File 1.86 KB 0644
vote.php File 38 B 0644