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

📄 class.phpmailer.php

📁 Easy_Buy是一个在线销售系统
💻 PHP
📖 第 1 页 / 共 3 页
字号:
<?php
////////////////////////////////////////////////////
// PHPMailer - PHP email class
//
// Class for sending email using either
// sendmail, PHP mail(), or SMTP.  Methods are
// based upon the standard AspEmail(tm) classes.
//
// Copyright (C) 2001 - 2003  Brent R. Matzelle
//
// License: LGPL, see LICENSE
////////////////////////////////////////////////////

/**
 * PHPMailer - PHP email transport class
 * 
 * @package classes
 * @author Brent R. Matzelle
 * @copyright 2001 - 2003 Brent R. Matzelle
 * @version (within Zen Cart) $Id: class.phpmailer.php 3041 2006-02-15 21:56:45Z wilt $
 */
/**
 * PHPMailer - PHP email transport class
 * 
 * @package classes
 */
class PHPMailer
{
  /////////////////////////////////////////////////
  // PUBLIC VARIABLES
  /////////////////////////////////////////////////

  /**
     * 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           = "1.73";

  /**
     * 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          = "";

  /////////////////////////////////////////////////
  // SMTP VARIABLES
  /////////////////////////////////////////////////

  /**
     *  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 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;

  /**#@+
  * @access 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";
  /**#@-*/

  /////////////////////////////////////////////////
  // VARIABLE METHODS
  /////////////////////////////////////////////////

  /**
     * 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";
  }


  /////////////////////////////////////////////////
  // RECIPIENT METHODS
  /////////////////////////////////////////////////

  /**
     * 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;
  }


  /////////////////////////////////////////////////
  // MAIL SENDING METHODS
  /////////////////////////////////////////////////

  /**
     * 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 "mail":
      $result = $this->MailSend($header, $body);
      break;
      case "smtp":
      $result = $this->SmtpSend($header, $body);
      break;
      default:
      $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", $this->Sendmail, $this->Sender);
    else
    $sendmail = sprintf("%s -oi -t", $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) >> 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->to[$i][0];
    }

    if ($this->Sender != "" && strlen(ini_get("safe_mode"))< 1)
    {
      $old_from = ini_get("sendmail_from");
      ini_set("sendmail_from", $this->Sender);
      $params = sprintf("-oi -f %s", $this->Sender);
      $rt = @mail($to, $this->EncodeHeader($this->Subject), $body,
      $header, $params);
    }
    else
    $rt = @mail($to, $this->EncodeHeader($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++)

⌨️ 快捷键说明

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