⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class.phpmailer.php

📁 在综合英文版XOOPS 2.09, 2.091, 2.092 的基础上正式发布XOOPS 2.09中文版 XOOPS 2.09x 版主要是PHP5升级、bug修正和安全补正: 1 全面兼容PHP 5.
💻 PHP
📖 第 1 页 / 共 4 页
字号:
        if(!$body = $this->create_body())            return false;        //echo "<pre>".$header . $body . "</pre>"; // debugging        // Choose the mailer        if($this->Mailer == "sendmail")        {          if(!$this->sendmail_send($header, $body))              return false;        }        elseif($this->Mailer == "mail")        {          if(!$this->mail_send($header, $body))              return false;        }        elseif($this->Mailer == "smtp")        {          if(!$this->smtp_send($header, $body))              return false;        }        else        {            $this->error_handler(sprintf("%s mailer is not supported", $this->Mailer));            return false;        }        return true;    }        /**     * Sends mail message to an assigned queue directory.  Has an optional      * sendTime argument.  This is used when the user wants the      * message to be sent from the queue at a predetermined time.      * The data must be a valid timestamp like that returned from      * the time() or strtotime() functions.  Returns false on failure      * or the message file name if success.     * @access public     * @return string     */    function SendToQueue($queue_path, $send_time = 0) {        $message = array();        $header = "";        $body = "";                // If invalid or empty just set to the current time        if($send_time == 0)            $send_time = time();                if(!is_dir($queue_path))        {            $this->error_handler("The supplied queue directory does not exist");            return false;        }        if((count($this->to) + count($this->cc) + count($this->bcc)) < 1)        {            $this->error_handler("You must provide at least one recipient email address");            return false;        }        // Set whether the message is multipart/alternative        if(!empty($this->AltBody))            $this->ContentType = "multipart/alternative";        $header = $this->create_header();        if(!$body = $this->create_body())            return false;        // Seed randomizer        mt_srand(time());        $msg_id = md5(uniqid(mt_rand()));                $fp = @fopen($queue_path . $msg_id . ".pqm", "wb");        if(!$fp)        {            $this->error_handler(sprintf("Could not write to %s directory", $queue_path));            return false;        }               $message[] = sprintf("----START PQM HEADER----%s", $this->LE);        $message[] = sprintf("SendTime: %s%s", $send_time, $this->LE);        $message[] = sprintf("Mailer: %s%s", $this->Mailer, $this->LE);        // Choose the mailer        if($this->Mailer == "sendmail")        {            $message[] = sprintf("Sendmail: %s%s", $this->Sendmail, $this->LE);            $message[] = sprintf("Sender: %s%s", $this->Sender, $this->LE);        }        elseif($this->Mailer == "mail")        {            $message[] = sprintf("Sender: %s%s", $this->Sender, $this->LE);            $message[] = sprintf("Subject: %s%s", $this->Subject, $this->LE);            $message[] = sprintf("to: %s%s", $this->addr_list($this->to), $this->LE);        }        elseif($this->Mailer == "smtp")        {            $message[] = sprintf("Host: %s%s", $this->Host, $this->LE);            $message[] = sprintf("Port: %d%s", $this->Port, $this->LE);            $message[] = sprintf("Helo: %s%s", $this->Helo, $this->LE);            $message[] = sprintf("Timeout: %d%s", $this->Timeout, $this->LE);                        if($this->SMTPAuth)                $auth_no = 1;            else                $auth_no = 0;            $message[] = sprintf("SMTPAuth: %d%s", $auth_no, $this->LE);            $message[] = sprintf("Username: %s%s", $this->Username, $this->LE);            $message[] = sprintf("Password: %s%s", $this->Password, $this->LE);            $message[] = sprintf("From: %s%s", $this->From, $this->LE);            $message[] = sprintf("to: %s%s", $this->addr_list($this->to), $this->LE);            $message[] = sprintf("cc: %s%s", $this->addr_list($this->cc), $this->LE);            $message[] = sprintf("bcc: %s%s", $this->addr_list($this->bcc), $this->LE);        }        else        {            $this->error_handler(sprintf("%s mailer is not supported", $this->Mailer));            return false;        }        $message[] = sprintf("----END PQM HEADER----%s", $this->LE); // end of pqm header                $message[] = $header;        $message[] = $body;               if(fwrite($fp, join("", $message)) == -1)        {            $this->error_handler("Write to file failed");            return false;        }        fclose($fp);        return ($msg_id . ".pqm");    }    /**     * Sends mail using the $Sendmail program.  Returns bool.     * @access private     * @return bool     */    function sendmail_send($header, $body) {        if ($this->Sender != "")            $sendmail = sprintf("%s -oi -f %s -t", $this->Sendmail, $this->Sender);        else            $sendmail = sprintf("%s -oi -t", $this->Sendmail);        if(!@$mail = popen($sendmail, "w"))        {            $this->error_handler(sprintf("Could not execute %s", $this->Sendmail));            return false;        }        fputs($mail, $header);        fputs($mail, $body);                $result = pclose($mail) >> 8 & 0xFF;        if($result != 0)        {            $this->error_handler(sprintf("Could not execute %s", $this->Sendmail));            return false;        }        return true;    }    /**     * Sends mail using the PHP mail() function.  Returns bool.     * @access private     * @return bool     */    function mail_send($header, $body) {        //$to = substr($this->addr_append("To", $this->to), 4, -2);        // Cannot add Bcc's to the $to        $to = $this->to[0][0]; // no extra comma        for($i = 1; $i < count($this->to); $i++)            $to .= sprintf(",%s", $this->to[$i][0]);        if ($this->Sender != "" && PHP_VERSION >= "4.0")        {            $old_from = ini_get("sendmail_from");            ini_set("sendmail_from", $this->Sender);        }        if ($this->Sender != "" && PHP_VERSION >= "4.0.5")        {            // The fifth parameter to mail is only available in PHP >= 4.0.5            $params = sprintf("-oi -f %s", $this->Sender);            $rt = @mail($to, $this->encode_header($this->Subject), $body, $header, $params);        }        else        {            $rt = @mail($to, $this->encode_header($this->Subject), $body, $header);        }        if (isset($old_from))            ini_set("sendmail_from", $old_from);        if(!$rt)        {            $this->error_handler("Could not instantiate mail()");            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 smtp_send($header, $body) {        // Include SMTP class code, but not twice        include_once($this->PluginDir . "class.smtp.php");        $smtp = new SMTP;        $smtp->do_debug = $this->SMTPDebug;        // Try to connect to all SMTP servers        $hosts = explode(";", $this->Host);        $index = 0;        $connection = false;        $smtp_from = "";        $bad_rcpt = array();        $e = "";        // Retry while there is no connection        while($index < count($hosts) && $connection == false)        {            if(strstr($hosts[$index], ":"))                list($host, $port) = explode(":", $hosts[$index]);            else            {                $host = $hosts[$index];                $port = $this->Port;            }            if($smtp->Connect($host, $port, $this->Timeout))                $connection = true;            //printf("%s host could not connect<br>", $hosts[$index]); //debug only            $index++;        }        if(!$connection)        {            $this->error_handler("SMTP Error: could not connect to SMTP host server(s)");            return false;        }        // Must perform HELO before authentication	if ($this->Helo != '')            $smtp->Hello($this->Helo);        else            $smtp->Hello($this->get_server_hostname());        // If user requests SMTP authentication        if($this->SMTPAuth)        {            if(!$smtp->Authenticate($this->Username, $this->Password))            {                $this->error_handler("SMTP Error: Could not authenticate");                return false;            }        }        if ($this->Sender == "")            $smtp_from = $this->From;        else            $smtp_from = $this->Sender;        if(!$smtp->Mail(sprintf("<%s>", $smtp_from)))        {            $e = sprintf("SMTP Error: From address [%s] failed", $smtp_from);            $this->error_handler($e);            return false;        }        // Attempt to send attach all recipients        for($i = 0; $i < count($this->to); $i++)        {            if(!$smtp->Recipient(sprintf("<%s>", $this->to[$i][0])))                $bad_rcpt[] = $this->to[$i][0];        }        for($i = 0; $i < count($this->cc); $i++)        {            if(!$smtp->Recipient(sprintf("<%s>", $this->cc[$i][0])))                $bad_rcpt[] = $this->cc[$i][0];        }        for($i = 0; $i < count($this->bcc); $i++)        {            if(!$smtp->Recipient(sprintf("<%s>", $this->bcc[$i][0])))                $bad_rcpt[] = $this->bcc[$i][0];        }        // Create error message        if(count($bad_rcpt) > 0)        {            for($i = 0; $i < count($bad_rcpt); $i++)            {                if($i != 0)                    $e .= ", ";                $e .= $bad_rcpt[$i];            }            $e = sprintf("SMTP Error: The following recipients failed [%s]", $e);            $this->error_handler($e);            return false;        }        if(!$smtp->Data(sprintf("%s%s", $header, $body)))        {            $this->error_handler("SMTP Error: Data not accepted");            return false;        }        $smtp->Quit();        $smtp->Close();        return true;    }    /////////////////////////////////////////////////    // MESSAGE CREATION METHODS    /////////////////////////////////////////////////    /**     * Creates recipient headers.  Returns string.     * @access private     * @return string     */    function addr_append($type, $addr) {        $addr_str = $type . ": ";        $addr_str .= $this->addr_format($addr[0]);        if(count($addr) > 1)        {            for($i = 1; $i < count($addr); $i++)            {                $addr_str .= sprintf(", %s", $this->addr_format($addr[$i]));            }            $addr_str .= $this->LE;        }        else            $addr_str .= $this->LE;        return($addr_str);    }        /**     * Creates a semicolon delimited list for use in pqm files.     * @access private     * @return string     */    function addr_list($list_array) {        $addr_list = "";        for($i = 0; $i < count($list_array); $i++)        {            if($i > 0)                $addr_list .= ";";            $addr_list .= $list_array[$i][0];        }                return $addr_list;    }        /**     * Formats an address correctly.      * @access private     * @return string     */    function addr_format($addr) {        if(empty($addr[1]))            $formatted = $addr[0];        else            $formatted = sprintf('%s <%s>', $this->encode_header($addr[1], 'phrase'), $addr[0]);        return $formatted;    }    /**     * Wraps message for use with mailers that do not     * automatically perform wrapping and for quoted-printable.     * Original written by philippe.  Returns string.     * @access private     * @return string     */    function word_wrap($message, $length, $qp_mode = false) {        if ($qp_mode)        $soft_break = sprintf(" =%s", $this->LE);        else        $soft_break = $this->LE;        $message = $this->fix_eol($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 (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 (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);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -