X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fphpmailer%2Fclass.phpmailer.php;h=59f4066477cfae03ebc54a4da5160c0b6f3df529;hb=4373e155854012d687fdfcae4c69d1a940883fab;hp=2ddc30fd27af80fa5e445e440ab9a4f792b6338f;hpb=7f104f6fe558bb56b4205241435a2357c2feece1;p=mailer.git diff --git a/inc/phpmailer/class.phpmailer.php b/inc/phpmailer/class.phpmailer.php index 2ddc30fd27..59f4066477 100644 --- a/inc/phpmailer/class.phpmailer.php +++ b/inc/phpmailer/class.phpmailer.php @@ -2,7 +2,7 @@ /*~ class.phpmailer.php .---------------------------------------------------------------------------. | Software: PHPMailer - PHP email class | -| Version: 2.0.2 | +| Version: 2.0.4 | | Contact: via sourceforge.net support pages (also www.codeworxtech.com) | | Info: http://phpmailer.sourceforge.net | | Support: http://sourceforge.net/projects/phpmailer/ | @@ -28,7 +28,7 @@ * PHPMailer - PHP email transport class * @package PHPMailer * @author Andy Prevost - * @copyright 2004 - 2008 Andy Prevost + * @copyright 2004 - 2009 Andy Prevost */ class PHPMailer { @@ -95,7 +95,7 @@ class PHPMailer { /** * Sets the Body of the message. This can be either an HTML or text body. - * If HTML then run IsHTML(true). + * If HTML then run IsHTML(TRUE). * @var string */ var $Body = ''; @@ -139,7 +139,7 @@ class PHPMailer { * Holds PHPMailer version. * @var string */ - var $Version = "2.0.2"; + var $Version = "2.0.4"; /** * Sets the email address that a reading confirmation will be sent. @@ -199,7 +199,7 @@ class PHPMailer { * Sets SMTP authentication. Utilizes the Username and Password variables. * @var bool */ - var $SMTPAuth = false; + var $SMTPAuth = FALSE; /** * Sets SMTP username. @@ -224,7 +224,7 @@ class PHPMailer { * Sets SMTP class debugging on or off. * @var bool */ - var $SMTPDebug = false; + var $SMTPDebug = FALSE; /** * Prevents the SMTP connection from being closed after each mail @@ -232,14 +232,14 @@ class PHPMailer { * requires an explicit call to SmtpClose(). * @var bool */ - var $SMTPKeepAlive = false; + var $SMTPKeepAlive = FALSE; /** * Provides the ability to have the TO field process individual * emails, instead of sending to entire TO addresses * @var bool */ - var $SingleTo = false; + var $SingleTo = FALSE; ///////////////////////////////////////////////// // PROPERTIES, PRIVATE @@ -257,6 +257,7 @@ class PHPMailer { var $language = array(); var $error_count = 0; var $LE = "\n"; + var $sign_cert_file = ""; var $sign_key_file = ""; var $sign_key_pass = ""; @@ -270,7 +271,7 @@ class PHPMailer { * @return void */ function IsHTML($bool) { - if($bool == true) { + if($bool == TRUE) { $this->ContentType = 'text/html'; } else { $this->ContentType = 'text/plain'; @@ -379,11 +380,11 @@ class PHPMailer { function Send() { $header = ''; $body = ''; - $result = true; + $result = TRUE; if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { $this->SetError($this->Lang('provide_address')); - return false; + return FALSE; } /* Set whether the message is multipart/alternative */ @@ -397,7 +398,7 @@ class PHPMailer { $body = $this->CreateBody(); if($body == '') { - return false; + return FALSE; } /* Choose the mailer */ @@ -415,7 +416,7 @@ class PHPMailer { $result = $this->MailSend($header, $body); break; //$this->SetError($this->Mailer . $this->Lang('mailer_not_supported')); - //$result = false; + //$result = FALSE; //break; } @@ -436,7 +437,7 @@ class PHPMailer { if(!@$mail = popen($sendmail, 'w')) { $this->SetError($this->Lang('execute') . $this->Sendmail); - return false; + return FALSE; } fputs($mail, $header); @@ -448,9 +449,9 @@ class PHPMailer { } if($result != 0) { $this->SetError($this->Lang('execute') . $this->Sendmail); - return false; + return FALSE; } - return true; + return TRUE; } /** @@ -472,7 +473,7 @@ class PHPMailer { if ($this->Sender != '' && strlen(ini_get('safe_mode')) < 1) { $old_from = ini_get('sendmail_from'); ini_set('sendmail_from', $this->Sender); - if ($this->SingleTo === true && count($toArr) > 1) { + if ($this->SingleTo === TRUE && count($toArr) > 1) { foreach ($toArr as $key => $val) { $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); } @@ -480,7 +481,7 @@ class PHPMailer { $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); } } else { - if ($this->SingleTo === true && count($toArr) > 1) { + if ($this->SingleTo === TRUE && count($toArr) > 1) { foreach ($toArr as $key => $val) { $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); } @@ -495,10 +496,10 @@ class PHPMailer { if(!$rt) { $this->SetError($this->Lang('instantiate')); - return false; + return FALSE; } - return true; + return TRUE; } /** @@ -514,7 +515,7 @@ class PHPMailer { $bad_rcpt = array(); if(!$this->SmtpConnect()) { - return false; + return FALSE; } $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender; @@ -522,7 +523,7 @@ class PHPMailer { $error = $this->Lang('from_failed') . $smtp_from; $this->SetError($error); $this->smtp->Reset(); - return false; + return FALSE; } /* Attempt to send attach all recipients */ @@ -552,21 +553,21 @@ class PHPMailer { $error = $this->Lang('recipients_failed') . $error; $this->SetError($error); $this->smtp->Reset(); - return false; + return FALSE; } if(!$this->smtp->Data($header . $body)) { $this->SetError($this->Lang('data_not_accepted')); $this->smtp->Reset(); - return false; + return FALSE; } - if($this->SMTPKeepAlive == true) { + if($this->SMTPKeepAlive == TRUE) { $this->smtp->Reset(); } else { $this->SmtpClose(); } - return true; + return TRUE; } /** @@ -586,7 +587,7 @@ class PHPMailer { $connection = ($this->smtp->Connected()); /* Retry while there is no connection */ - while($index < count($hosts) && $connection == false) { + while($index < count($hosts) && $connection == FALSE) { $hostinfo = array(); if(eregi('^(.+):([0-9]+)$', $hosts[$index], $hostinfo)) { $host = $hostinfo[1]; @@ -603,12 +604,12 @@ class PHPMailer { $this->smtp->Hello($this->ServerHostname()); } - $connection = true; + $connection = TRUE; if($this->SMTPAuth) { if(!$this->smtp->Authenticate($this->Username, $this->Password)) { $this->SetError($this->Lang('authenticate')); $this->smtp->Reset(); - $connection = false; + $connection = FALSE; } } } @@ -649,12 +650,24 @@ class PHPMailer { } 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; + $PHPMAILER_LANG = array(); + $PHPMAILER_LANG["provide_address"] = 'You must provide at least one ' . + $PHPMAILER_LANG["mailer_not_supported"] = ' mailer is not supported.'; + $PHPMAILER_LANG["execute"] = 'Could not execute: '; + $PHPMAILER_LANG["instantiate"] = 'Could not instantiate mail function.'; + $PHPMAILER_LANG["authenticate"] = 'SMTP Error: Could not authenticate.'; + $PHPMAILER_LANG["from_failed"] = 'The following From address failed: '; + $PHPMAILER_LANG["recipients_failed"] = 'SMTP Error: The following ' . + $PHPMAILER_LANG["data_not_accepted"] = 'SMTP Error: Data not accepted.'; + $PHPMAILER_LANG["connect_host"] = 'SMTP Error: Could not connect to SMTP host.'; + $PHPMAILER_LANG["file_access"] = 'Could not access file: '; + $PHPMAILER_LANG["file_open"] = 'File Error: Could not open file: '; + $PHPMAILER_LANG["encoding"] = 'Unknown encoding: '; + $PHPMAILER_LANG["signing"] = 'Signing Error: '; } $this->language = $PHPMAILER_LANG; - return true; + return TRUE; } ///////////////////////////////////////////////// @@ -701,7 +714,7 @@ class PHPMailer { * @access private * @return string */ - function WrapText($message, $length, $qp_mode = false) { + 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 @@ -784,12 +797,12 @@ class PHPMailer { * @return int */ function UTF8CharBoundary($encodedText, $maxLength) { - $foundSplitPos = false; + $foundSplitPos = FALSE; $lookBack = 3; while (!$foundSplitPos) { $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); $encodedCharPos = strpos($lastChunk, "="); - if ($encodedCharPos !== false) { + 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); @@ -799,17 +812,17 @@ class PHPMailer { // otherwise reduce maxLength to start of the encoded char $maxLength = ($encodedCharPos == 0) ? $maxLength : $maxLength - ($lookBack - $encodedCharPos); - $foundSplitPos = true; + $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; + $foundSplitPos = TRUE; } elseif ($dec < 192) { // Middle byte of a multi byte character, look further back $lookBack += 3; } } else { // No encoded character found - $foundSplitPos = true; + $foundSplitPos = TRUE; } } return $maxLength; @@ -864,9 +877,6 @@ class PHPMailer { } elseif (count($this->cc) == 0) { $result .= $this->HeaderLine('To', 'undisclosed-recipients:;'); } - if(count($this->cc) > 0) { - $result .= $this->AddrAppend('Cc', $this->cc); - } } $from = array(); @@ -1007,9 +1017,13 @@ class PHPMailer { fclose($fp); $signed = tempnam("", "signed"); - if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_key_file, array("file://".$this->sign_key_file, $this->sign_key_pass), null)) { + if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), null)) { $fp = fopen($signed, "r"); $result = fread($fp, filesize($this->sign_key_file)); + $result = ''; + while(!feof($fp)){ + $result = $result . fread($fp, 1024); + } fclose($fp); } else { $this->SetError($this->Lang("signing").openssl_error_string()); @@ -1110,7 +1124,7 @@ class PHPMailer { function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { if(!@is_file($path)) { $this->SetError($this->Lang('file_access') . $path); - return false; + return FALSE; } $filename = basename($path); @@ -1124,11 +1138,11 @@ class PHPMailer { $this->attachment[$cur][2] = $name; $this->attachment[$cur][3] = $encoding; $this->attachment[$cur][4] = $type; - $this->attachment[$cur][5] = false; // isStringAttachment + $this->attachment[$cur][5] = FALSE; // isStringAttachment $this->attachment[$cur][6] = 'attachment'; $this->attachment[$cur][7] = 0; - return true; + return TRUE; } /** @@ -1159,14 +1173,14 @@ class PHPMailer { $cid = $this->attachment[$i][7]; $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE); - $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $name, $this->LE); + $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE); $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); if($disposition == 'inline') { $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); } - $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $name, $this->LE.$this->LE); + $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE); /* Encode as string attachment */ if($bString) { @@ -1292,7 +1306,7 @@ class PHPMailer { } else { $encoding = 'Q'; $encoded = $this->EncodeQ($str, $position); - $encoded = $this->WrapText($encoded, $maxlen, true); + $encoded = $this->WrapText($encoded, $maxlen, TRUE); $encoded = str_replace('='.$this->LE, "\n", trim($encoded)); } @@ -1361,7 +1375,7 @@ class PHPMailer { * @access private * @return string */ - function EncodeQP( $input = '', $line_max = 76, $space_conv = false ) { + function EncodeQP( $input = '', $line_max = 76, $space_conv = FALSE ) { $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); $lines = preg_split('/(?:\r\n|\r|\n)/', $input); $eol = "\r\n"; @@ -1399,7 +1413,7 @@ class PHPMailer { } // end of for $output .= $newline.$eol; } // end of while - return trim($output); + return $output; } /** @@ -1449,7 +1463,7 @@ class PHPMailer { $this->attachment[$cur][2] = $filename; $this->attachment[$cur][3] = $encoding; $this->attachment[$cur][4] = $type; - $this->attachment[$cur][5] = true; // isString + $this->attachment[$cur][5] = TRUE; // isString $this->attachment[$cur][6] = 'attachment'; $this->attachment[$cur][7] = 0; } @@ -1471,7 +1485,7 @@ class PHPMailer { if(!@is_file($path)) { $this->SetError($this->Lang('file_access') . $path); - return false; + return FALSE; } $filename = basename($path); @@ -1486,11 +1500,11 @@ class PHPMailer { $this->attachment[$cur][2] = $name; $this->attachment[$cur][3] = $encoding; $this->attachment[$cur][4] = $type; - $this->attachment[$cur][5] = false; + $this->attachment[$cur][5] = FALSE; $this->attachment[$cur][6] = 'inline'; $this->attachment[$cur][7] = $cid; - return true; + return TRUE; } /** @@ -1499,10 +1513,10 @@ class PHPMailer { * @return bool */ function InlineImageExists() { - $result = false; + $result = FALSE; for($i = 0; $i < count($this->attachment); $i++) { if($this->attachment[$i][6] == 'inline') { - $result = true; + $result = TRUE; break; } } @@ -1710,19 +1724,18 @@ class PHPMailer { $ext = $fileParts[1]; $mimeType = $this->_mime_types($ext); if ( strlen($basedir) > 1 && substr($basedir,-1) != '/') { $basedir .= '/'; } - if ( strlen($directory) > 1 && substr($basedir,-1) != '/') { $directory .= '/'; } - $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64', $mimeType); + if ( strlen($directory) > 1 && substr($directory,-1) != '/') { $directory .= '/'; } if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64',$mimeType) ) { $message = preg_replace("/".$images[1][$i]."=\"".preg_quote($url, '/')."\"/Ui", $images[1][$i]."=\"".$cid."\"", $message); } } } } - $this->IsHTML(true); + $this->IsHTML(TRUE); $this->Body = $message; $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message))); if ( !empty($textMsg) && empty($this->AltBody) ) { - $this->AltBody = $textMsg; + $this->AltBody = html_entity_decode($textMsg); } if ( empty($this->AltBody) ) { $this->AltBody = 'To view this email message, open the email in with HTML compatibility!' . "\n\n"; @@ -1736,93 +1749,92 @@ class PHPMailer { */ function _mime_types($ext = '') { $mimes = array( - 'hqx' => 'application/mac-binhex40', - 'cpt' => 'application/mac-compactpro', - 'doc' => 'application/msword', + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'avi' => 'video/x-msvideo', 'bin' => 'application/macbinary', - 'dms' => 'application/octet-stream', - 'lha' => 'application/octet-stream', - 'lzh' => 'application/octet-stream', - 'exe' => 'application/octet-stream', + 'bmp' => 'image/bmp', 'class' => 'application/octet-stream', - 'psd' => 'application/octet-stream', - 'so' => 'application/octet-stream', - 'sea' => 'application/octet-stream', - 'dll' => 'application/octet-stream', - 'oda' => 'application/oda', - 'pdf' => 'application/pdf', - 'ai' => 'application/postscript', - 'eps' => 'application/postscript', - 'ps' => 'application/postscript', - 'smi' => 'application/smil', - 'smil' => 'application/smil', - 'mif' => 'application/vnd.mif', - 'xls' => 'application/vnd.ms-excel', - 'ppt' => 'application/vnd.ms-powerpoint', - 'wbxml' => 'application/vnd.wap.wbxml', - 'wmlc' => 'application/vnd.wap.wmlc', + 'cpt' => 'application/mac-compactpro', + 'css' => 'text/css', 'dcr' => 'application/x-director', 'dir' => 'application/x-director', - 'dxr' => 'application/x-director', + 'dll' => 'application/octet-stream', + 'dms' => 'application/octet-stream', + 'doc' => 'application/msword', 'dvi' => 'application/x-dvi', + 'dxr' => 'application/x-director', + 'eml' => 'message/rfc822', + 'eps' => 'application/postscript', + 'exe' => 'application/octet-stream', + 'gif' => 'image/gif', 'gtar' => 'application/x-gtar', - 'php' => 'application/x-httpd-php', - 'php4' => 'application/x-httpd-php', - 'php3' => 'application/x-httpd-php', - 'phtml' => 'application/x-httpd-php', - 'phps' => 'application/x-httpd-php-source', + 'htm' => 'text/html', + 'html' => 'text/html', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'hqx' => 'application/mac-binhex40', 'js' => 'application/x-javascript', - 'swf' => 'application/x-shockwave-flash', - 'sit' => 'application/x-stuffit', - 'tar' => 'application/x-tar', - 'tgz' => 'application/x-tar', - 'xhtml' => 'application/xhtml+xml', - 'xht' => 'application/xhtml+xml', - 'zip' => 'application/zip', + 'lha' => 'application/octet-stream', + 'log' => 'text/plain', + 'lzh' => 'application/octet-stream', 'mid' => 'audio/midi', 'midi' => 'audio/midi', - 'mpga' => 'audio/mpeg', + 'mif' => 'application/vnd.mif', + 'mov' => 'video/quicktime', + 'movie' => 'video/x-sgi-movie', 'mp2' => 'audio/mpeg', 'mp3' => 'audio/mpeg', - 'aif' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'aifc' => 'audio/x-aiff', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpga' => 'audio/mpeg', + 'oda' => 'application/oda', + 'pdf' => 'application/pdf', + 'php' => 'application/x-httpd-php', + 'php3' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'phtml' => 'application/x-httpd-php', + 'png' => 'image/png', + 'ppt' => 'application/vnd.ms-powerpoint', + 'ps' => 'application/postscript', + 'psd' => 'application/octet-stream', + 'qt' => 'video/quicktime', + 'ra' => 'audio/x-realaudio', 'ram' => 'audio/x-pn-realaudio', 'rm' => 'audio/x-pn-realaudio', 'rpm' => 'audio/x-pn-realaudio-plugin', - 'ra' => 'audio/x-realaudio', + 'rtf' => 'text/rtf', + 'rtx' => 'text/richtext', 'rv' => 'video/vnd.rn-realvideo', - 'wav' => 'audio/x-wav', - 'bmp' => 'image/bmp', - 'gif' => 'image/gif', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'jpe' => 'image/jpeg', - 'png' => 'image/png', - 'tiff' => 'image/tiff', - 'tif' => 'image/tiff', - 'css' => 'text/css', - 'html' => 'text/html', - 'htm' => 'text/html', + 'sea' => 'application/octet-stream', 'shtml' => 'text/html', - 'txt' => 'text/plain', + 'sit' => 'application/x-stuffit', + 'so' => 'application/octet-stream', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'swf' => 'application/x-shockwave-flash', + 'tar' => 'application/x-tar', 'text' => 'text/plain', - 'log' => 'text/plain', - 'rtx' => 'text/richtext', - 'rtf' => 'text/rtf', - 'xml' => 'text/xml', - 'xsl' => 'text/xml', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mpe' => 'video/mpeg', - 'qt' => 'video/quicktime', - 'mov' => 'video/quicktime', - 'avi' => 'video/x-msvideo', - 'movie' => 'video/x-sgi-movie', - 'doc' => 'application/msword', + 'txt' => 'text/plain', + 'tgz' => 'application/x-tar', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'wav' => 'audio/x-wav', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wmlc' => 'application/vnd.wap.wmlc', 'word' => 'application/msword', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', 'xl' => 'application/excel', - 'eml' => 'message/rfc822' + 'xls' => 'application/vnd.ms-excel', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'zip' => 'application/zip' ); return ( ! isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)]; } @@ -1843,7 +1855,7 @@ class PHPMailer { $this->$name = $value; } else { $this->SetError('Cannot set or reset variable ' . $name); - return false; + return FALSE; } } @@ -1862,7 +1874,7 @@ class PHPMailer { fclose($fp); return $return; } else { - return false; + return FALSE; } } @@ -1886,7 +1898,8 @@ class PHPMailer { * @param string $key_filename Parameter File Name * @param string $key_pass Password for private key */ - function Sign($key_filename, $key_pass) { + function Sign($cert_filename, $key_filename, $key_pass) { + $this->sign_cert_file = $cert_filename; $this->sign_key_file = $key_filename; $this->sign_key_pass = $key_pass; }