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

📄 class.phpmailer.php

📁 邮箱加即时聊天
💻 PHP
📖 第 1 页 / 共 4 页
字号:
        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;    }

⌨️ 快捷键说明

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