WordPress.org

Make WordPress Core

Ticket #19887: 19887.diff

File 19887.diff, 14.3 KB (added by MattyRob, 8 years ago)
  • wp-includes/class-smtp.php

     
    22/*~ class.smtp.php
    33.---------------------------------------------------------------------------.
    44|  Software: PHPMailer - PHP email class                                    |
    5 |   Version: 5.2                                                            |
     5|   Version: 5.2.1                                                          |
    66|      Site: https://code.google.com/a/apache-extras.org/p/phpmailer/       |
    77| ------------------------------------------------------------------------- |
    88|     Admin: Jim Jagielski (project admininistrator)                        |
     
    1010|          : Marcus Bointon (coolbru) coolbru@users.sourceforge.net         |
    1111|          : Jim Jagielski (jimjag) jimjag@gmail.com                        |
    1212|   Founder: Brent R. Matzelle (original founder)                           |
    13 | Copyright (c) 2010-2011, Jim Jagielski. All Rights Reserved.               |
     13| Copyright (c) 2010-2012, Jim Jagielski. All Rights Reserved.              |
    1414| Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved.               |
    1515| Copyright (c) 2001-2003, Brent R. Matzelle                                |
    1616| ------------------------------------------------------------------------- |
     
    3030 * @author Marcus Bointon
    3131 * @copyright 2004 - 2008 Andy Prevost
    3232 * @author Jim Jagielski
    33  * @copyright 2010 - 2011 Jim Jagielski
     33 * @copyright 2010 - 2012 Jim Jagielski
    3434 * @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL)
    3535 * @version $Id: class.smtp.php 450 2010-06-23 16:46:33Z coolbru $
    3636 */
     
    7272   * Sets the SMTP PHPMailer Version number
    7373   * @var string
    7474   */
    75   public $Version         = '5.2';
     75  public $Version         = '5.2.1';
    7676
    7777  /////////////////////////////////////////////////
    7878  // PROPERTIES, PRIVATE AND PROTECTED
     
    797797   */
    798798  private function get_lines() {
    799799    $data = "";
    800     while($str = @fgets($this->smtp_conn,515)) {
     800    while(!feof($this->smtp_conn)) {
     801      $str = @fgets($this->smtp_conn,515);
    801802      if($this->do_debug >= 4) {
    802803        echo "SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF . '<br />';
    803804        echo "SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF . '<br />';
  • wp-includes/class-phpmailer.php

     
    22/*~ class.phpmailer.php
    33.---------------------------------------------------------------------------.
    44|  Software: PHPMailer - PHP email class                                    |
    5 |   Version: 5.2                                                            |
     5|   Version: 5.2.1                                                          |
    66|      Site: https://code.google.com/a/apache-extras.org/p/phpmailer/       |
    77| ------------------------------------------------------------------------- |
    88|     Admin: Jim Jagielski (project admininistrator)                        |
     
    1010|          : Marcus Bointon (coolbru) coolbru@users.sourceforge.net         |
    1111|          : Jim Jagielski (jimjag) jimjag@gmail.com                        |
    1212|   Founder: Brent R. Matzelle (original founder)                           |
    13 | Copyright (c) 2010-2011, Jim Jagielski. All Rights Reserved.               |
     13| Copyright (c) 2010-2012, Jim Jagielski. All Rights Reserved.              |
    1414| Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved.               |
    1515| Copyright (c) 2001-2003, Brent R. Matzelle                                |
    1616| ------------------------------------------------------------------------- |
     
    2929 * @author Andy Prevost
    3030 * @author Marcus Bointon
    3131 * @author Jim Jagielski
    32  * @copyright 2010 - 2011 Jim Jagielski
     32 * @copyright 2010 - 2012 Jim Jagielski
    3333 * @copyright 2004 - 2009 Andy Prevost
    3434 * @version $Id: class.phpmailer.php 450 2010-06-23 16:46:33Z coolbru $
    3535 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
     
    130130  protected $MIMEHeader     = '';
    131131
    132132  /**
     133   * Stores the complete sent MIME message (Body and Headers)
     134   * @var string
     135   * @access protected
     136  */
     137  protected $SentMIMEMessage     = '';
     138
     139  /**
    133140   * Sets word wrapping on the body of the message to a given number of
    134141   * characters.
    135142   * @var int
     
    317324   * Sets the PHPMailer Version number
    318325   * @var string
    319326   */
    320   public $Version         = '5.2';
     327  public $Version         = '5.2.1';
    321328
    322329  /**
    323330   * What to use in the X-Mailer header
     
    460467   * @return boolean
    461468   */
    462469  public function AddReplyTo($address, $name = '') {
    463     return $this->AddAnAddress('ReplyTo', $address, $name);
     470    return $this->AddAnAddress('Reply-To', $address, $name);
    464471  }
    465472
    466473  /**
     
    473480   * @access protected
    474481   */
    475482  protected function AddAnAddress($kind, $address, $name = '') {
    476     if (!preg_match('/^(to|cc|bcc|ReplyTo)$/', $kind)) {
     483    if (!preg_match('/^(to|cc|bcc|Reply-To)$/', $kind)) {
    477484      $this->SetError($this->Lang('Invalid recipient array').': '.$kind);
    478485      if ($this->exceptions) {
    479486        throw new phpmailerException('Invalid recipient array: ' . $kind);
    480487      }
    481       echo $this->Lang('Invalid recipient array').': '.$kind;
     488          if ($this->SMTPDebug) {
     489        echo $this->Lang('Invalid recipient array').': '.$kind;
     490      }
    482491      return false;
    483492    }
    484493    $address = trim($address);
     
    488497      if ($this->exceptions) {
    489498        throw new phpmailerException($this->Lang('invalid_address').': '.$address);
    490499      }
    491       echo $this->Lang('invalid_address').': '.$address;
     500          if ($this->SMTPDebug) {
     501        echo $this->Lang('invalid_address').': '.$address;
     502      }
    492503      return false;
    493504    }
    494     if ($kind != 'ReplyTo') {
     505    if ($kind != 'Reply-To') {
    495506      if (!isset($this->all_recipients[strtolower($address)])) {
    496507        array_push($this->$kind, array($address, $name));
    497508        $this->all_recipients[strtolower($address)] = true;
     
    520531      if ($this->exceptions) {
    521532        throw new phpmailerException($this->Lang('invalid_address').': '.$address);
    522533      }
    523       echo $this->Lang('invalid_address').': '.$address;
     534          if ($this->SMTPDebug) {
     535        echo $this->Lang('invalid_address').': '.$address;
     536      }
    524537      return false;
    525538    }
    526539    $this->From = $address;
    527540    $this->FromName = $name;
    528541    if ($auto) {
    529542      if (empty($this->ReplyTo)) {
    530         $this->AddAnAddress('ReplyTo', $address, $name);
     543        $this->AddAnAddress('Reply-To', $address, $name);
    531544      }
    532545      if (empty($this->Sender)) {
    533546        $this->Sender = $address;
     
    574587      if(!$this->PreSend()) return false;
    575588      return $this->PostSend();
    576589    } catch (phpmailerException $e) {
     590          $this->SentMIMEMessage = '';
    577591      $this->SetError($e->getMessage());
    578592      if ($this->exceptions) {
    579593        throw $e;
     
    584598
    585599  protected function PreSend() {
    586600    try {
     601          $mailHeader = "";
    587602      if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) {
    588603        throw new phpmailerException($this->Lang('provide_address'), self::STOP_CRITICAL);
    589604      }
     
    603618      $this->MIMEHeader = $this->CreateHeader();
    604619      $this->MIMEBody = $this->CreateBody();
    605620
     621      // To capture the complete message when using mail(), create
     622          // an extra header list which CreateHeader() doesn't fold in
     623      if ($this->Mailer == 'mail') {
     624        if (count($this->to) > 0) {
     625          $mailHeader .= $this->AddrAppend("To", $this->to);
     626        } else {
     627          $mailHeader .= $this->HeaderLine("To", "undisclosed-recipients:;");
     628        }
     629        $mailHeader .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader(trim($this->Subject))));
     630        // if(count($this->cc) > 0) {
     631            // $mailHeader .= $this->AddrAppend("Cc", $this->cc);
     632        // }
     633      }
    606634
    607635      // digitally sign with DKIM if enabled
    608636      if ($this->DKIM_domain && $this->DKIM_private) {
     
    610638        $this->MIMEHeader = str_replace("\r\n", "\n", $header_dkim) . $this->MIMEHeader;
    611639      }
    612640
     641      $this->SentMIMEMessage = sprintf("%s%s\r\n\r\n%s",$this->MIMEHeader,$mailHeader,$this->MIMEBody);
    613642      return true;
     643
    614644    } catch (phpmailerException $e) {
    615645      $this->SetError($e->getMessage());
    616646      if ($this->exceptions) {
     
    628658          return $this->SendmailSend($this->MIMEHeader, $this->MIMEBody);
    629659        case 'smtp':
    630660          return $this->SmtpSend($this->MIMEHeader, $this->MIMEBody);
     661        case 'mail':
     662          return $this->MailSend($this->MIMEHeader, $this->MIMEBody);
    631663        default:
    632664          return $this->MailSend($this->MIMEHeader, $this->MIMEBody);
    633665      }
     
    637669      if ($this->exceptions) {
    638670        throw $e;
    639671      }
    640       echo $e->getMessage()."\n";
     672          if ($this->SMTPDebug) {
     673        echo $e->getMessage()."\n";
     674      }
    641675      return false;
    642676    }
    643677  }
     
    703737    $to = implode(', ', $toArr);
    704738
    705739    if (empty($this->Sender)) {
    706       $params = "-oi -f %s";
     740      $params = "-oi ";
    707741    } else {
    708742      $params = sprintf("-oi -f %s", $this->Sender);
    709743    }
     
    732766          $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body);
    733767        }
    734768      } else {
    735         $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header);
     769        $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
    736770        // implement call back function if it exists
    737771        $isSent = ($rt == 1) ? 1 : 0;
    738772        $this->doCallback($isSent, $to, $this->cc, $this->bcc, $this->Subject, $body);
     
    880914      }
    881915    } catch (phpmailerException $e) {
    882916      $this->smtp->Reset();
    883       throw $e;
     917          if ($this->exceptions) {
     918        throw $e;
     919      }
    884920    }
    885921    return true;
    886922  }
     
    11591195          $result .= $this->HeaderLine('To', 'undisclosed-recipients:;');
    11601196        }
    11611197      }
    1162     }
     1198        }
    11631199
    11641200    $from = array();
    11651201    $from[0][0] = trim($this->From);
     
    11771213    }
    11781214
    11791215    if(count($this->ReplyTo) > 0) {
    1180       $result .= $this->AddrAppend('Reply-to', $this->ReplyTo);
     1216      $result .= $this->AddrAppend('Reply-To', $this->ReplyTo);
    11811217    }
    11821218
    11831219    // mail() sets the subject itself
     
    12511287  }
    12521288
    12531289  /**
     1290   * Returns the MIME message (headers and body). Only really valid post PreSend().
     1291   * @access public
     1292   * @return string
     1293   */
     1294  public function GetSentMIMEMessage() {
     1295    return $this->SentMIMEMessage;
     1296  }
     1297
     1298
     1299  /**
    12541300   * Assembles the message body.  Returns an empty string on failure.
    12551301   * @access public
    12561302   * @return string The assembled message body
     
    13631409        $signed = tempnam("", "signed");
    13641410        if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), NULL)) {
    13651411          @unlink($file);
     1412          $body = file_get_contents($signed);
    13661413          @unlink($signed);
    1367           $body = file_get_contents($signed);
    13681414        } else {
    13691415          @unlink($file);
    13701416          @unlink($signed);
     
    14871533      if ($this->exceptions) {
    14881534        throw $e;
    14891535      }
    1490       echo $e->getMessage()."\n";
     1536          if ($this->SMTPDebug) {
     1537        echo $e->getMessage()."\n";
     1538      }
    14911539      if ( $e->getCode() == self::STOP_CRITICAL ) {
    14921540        return false;
    14931541      }
     
    15901638          return false;
    15911639        }
    15921640      }
    1593       if (version_compare(PHP_VERSION, '5.3.0', '<')) {
    1594         $magic_quotes = get_magic_quotes_runtime();
    1595         set_magic_quotes_runtime(0);
    1596       }
     1641          $magic_quotes = get_magic_quotes_runtime();
     1642          if ($magic_quotes) {
     1643        if (version_compare(PHP_VERSION, '5.3.0', '<')) {
     1644          set_magic_quotes_runtime(0);
     1645        } else {
     1646                  ini_set('magic_quotes_runtime', 0);
     1647                }
     1648          }
    15971649      $file_buffer  = file_get_contents($path);
    15981650      $file_buffer  = $this->EncodeString($file_buffer, $encoding);
    1599       if (version_compare(PHP_VERSION, '5.3.0', '<')) {
    1600         set_magic_quotes_runtime($magic_quotes);
    1601       }
     1651          if ($magic_quotes) {
     1652        if (version_compare(PHP_VERSION, '5.3.0', '<')) {
     1653          set_magic_quotes_runtime($magic_quotes);
     1654        } else {
     1655                  ini_set('magic_quotes_runtime', $magic_quotes);
     1656            }
     1657          }
    16021658      return $file_buffer;
    16031659    } catch (Exception $e) {
    16041660      $this->SetError($e->getMessage());
     
    21542210   * @return $message
    21552211   */
    21562212  public function MsgHTML($message, $basedir = '') {
    2157     preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images);
     2213    preg_match_all("/(src|background)=[\"'](.*)[\"']/Ui", $message, $images);
    21582214    if(isset($images[2])) {
    21592215      foreach($images[2] as $i => $url) {
    21602216        // do not change urls for absolute images (thanks to corvuscorax)
     
    21682224          if ( strlen($basedir) > 1 && substr($basedir, -1) != '/') { $basedir .= '/'; }
    21692225          if ( strlen($directory) > 1 && substr($directory, -1) != '/') { $directory .= '/'; }
    21702226          if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64', $mimeType) ) {
    2171             $message = preg_replace("/".$images[1][$i]."=\"".preg_quote($url, '/')."\"/Ui", $images[1][$i]."=\"".$cid."\"", $message);
     2227            $message = preg_replace("/".$images[1][$i]."=[\"']".preg_quote($url, '/')."[\"']/Ui", $images[1][$i]."=\"".$cid."\"", $message);
    21722228          }
    21732229        }
    21742230      }
    21752231    }
    21762232    $this->IsHTML(true);
    21772233    $this->Body = $message;
    2178     $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s', '', $message)));
    2179     if (!empty($textMsg) && empty($this->AltBody)) {
    2180       $this->AltBody = html_entity_decode($textMsg);
    2181     }
     2234        if (empty($this->AltBody)) {
     2235                $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s', '', $message)));
     2236                if (!empty($textMsg)) {
     2237                        $this->AltBody = html_entity_decode($textMsg, ENT_QUOTES, $this->CharSet);
     2238                }
     2239        }
    21822240    if (empty($this->AltBody)) {
    21832241      $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . "\n\n";
    21842242    }
     2243        return $message;
    21852244  }
    21862245
    21872246  /**