X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fphpmailer%2Fclass.phpmailer.php;h=2ddc30fd27af80fa5e445e440ab9a4f792b6338f;hb=930830936f3d53fcfde60d14a408c5add6679a22;hp=0879aff5e298b6bcfba2c23fe4d0c93d8505077e;hpb=8383fc52cd2340ea1756f9e1808fa3589e27c341;p=mailer.git diff --git a/inc/phpmailer/class.phpmailer.php b/inc/phpmailer/class.phpmailer.php index 0879aff5e2..2ddc30fd27 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.0 rc3 | +| Version: 2.0.2 | | 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 - 2007 Andy Prevost + * @copyright 2004 - 2008 Andy Prevost */ class PHPMailer { @@ -66,7 +66,7 @@ class PHPMailer { * Holds the most recent mailer error message. * @var string */ - var $ErrorInfo = ""; + var $ErrorInfo = ''; /** * Sets the From email address for the message. @@ -85,20 +85,20 @@ class PHPMailer { * will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode. * @var string */ - var $Sender = ""; + var $Sender = ''; /** * Sets the Subject of the message. * @var string */ - var $Subject = ""; + 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 = ""; + var $Body = ''; /** * Sets the text-only body of the message. This automatically sets the @@ -107,7 +107,7 @@ class PHPMailer { * that can read HTML will view the normal Body. * @var string */ - var $AltBody = ""; + var $AltBody = ''; /** * Sets word wrapping on the body of the message to a given number of @@ -133,19 +133,19 @@ class PHPMailer { * is in a different directory than the PHP include path. * @var string */ - var $PluginDir = ""; + var $PluginDir = ''; /** * Holds PHPMailer version. * @var string */ - var $Version = "2.0.0 rc3"; + var $Version = "2.0.2"; /** * Sets the email address that a reading confirmation will be sent. * @var string */ - var $ConfirmReadingTo = ""; + var $ConfirmReadingTo = ''; /** * Sets the hostname to use in Message-Id and Received headers @@ -153,7 +153,14 @@ class PHPMailer { * by SERVER_NAME is used or 'localhost.localdomain'. * @var string */ - var $Hostname = ""; + var $Hostname = ''; + + /** + * Sets the message ID to be used in the Message-Id header. + * If empty, a unique id will be generated. + * @var string + */ + var $MessageID = ''; ///////////////////////////////////////////////// // PROPERTIES FOR SMTP @@ -179,7 +186,7 @@ class PHPMailer { * Sets the SMTP HELO of the message (Default is $Hostname). * @var string */ - var $Helo = ""; + var $Helo = ''; /** * Sets connection prefix. @@ -198,13 +205,13 @@ class PHPMailer { * Sets SMTP username. * @var string */ - var $Username = ""; + var $Username = ''; /** * Sets SMTP password. * @var string */ - var $Password = ""; + var $Password = ''; /** * Sets the SMTP server timeout in seconds. This function will not @@ -245,11 +252,13 @@ class PHPMailer { var $ReplyTo = array(); var $attachment = array(); var $CustomHeader = array(); - var $message_type = ""; + var $message_type = ''; var $boundary = array(); var $language = array(); var $error_count = 0; var $LE = "\n"; + var $sign_key_file = ""; + var $sign_key_pass = ""; ///////////////////////////////////////////////// // METHODS, VARIABLES @@ -311,7 +320,7 @@ class PHPMailer { * @param string $name * @return void */ - function AddAddress($address, $name = "") { + function AddAddress($address, $name = '') { $cur = count($this->to); $this->to[$cur][0] = trim($address); $this->to[$cur][1] = $name; @@ -325,7 +334,7 @@ class PHPMailer { * @param string $name * @return void */ - function AddCC($address, $name = "") { + function AddCC($address, $name = '') { $cur = count($this->cc); $this->cc[$cur][0] = trim($address); $this->cc[$cur][1] = $name; @@ -339,7 +348,7 @@ class PHPMailer { * @param string $name * @return void */ - function AddBCC($address, $name = "") { + function AddBCC($address, $name = '') { $cur = count($this->bcc); $this->bcc[$cur][0] = trim($address); $this->bcc[$cur][1] = $name; @@ -351,7 +360,7 @@ class PHPMailer { * @param string $name * @return void */ - function AddReplyTo($address, $name = "") { + function AddReplyTo($address, $name = '') { $cur = count($this->ReplyTo); $this->ReplyTo[$cur][0] = trim($address); $this->ReplyTo[$cur][1] = $name; @@ -368,8 +377,8 @@ class PHPMailer { * @return bool */ function Send() { - $header = ""; - $body = ""; + $header = ''; + $body = ''; $result = true; if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { @@ -387,7 +396,7 @@ class PHPMailer { $header .= $this->CreateHeader(); $body = $this->CreateBody(); - if($body == "") { + if($body == '') { return false; } @@ -433,12 +442,14 @@ class PHPMailer { fputs($mail, $header); fputs($mail, $body); - $result = pclose($mail) >> 8 & 0xFF; + $result = pclose($mail); + if (version_compare(phpversion(), '4.2.3') == -1) { + $result = $result >> 8 & 0xFF; + } if($result != 0) { $this->SetError($this->Lang('execute') . $this->Sendmail); return false; } - return true; } @@ -449,7 +460,7 @@ class PHPMailer { */ function MailSend($header, $body) { - $to = ""; + $to = ''; for($i = 0; $i < count($this->to); $i++) { if($i != 0) { $to .= ', '; } $to .= $this->AddrFormat($this->to[$i]); @@ -457,10 +468,10 @@ class PHPMailer { $toArr = split(',', $to); - if ($this->Sender != '' && strlen(ini_get('safe_mode'))< 1) { + $params = sprintf("-oi -f %s", $this->Sender); + 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); if ($this->SingleTo === true && count($toArr) > 1) { foreach ($toArr as $key => $val) { $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); @@ -499,14 +510,14 @@ class PHPMailer { */ function SmtpSend($header, $body) { include_once($this->PluginDir . 'class.smtp.php'); - $error = ""; + $error = ''; $bad_rcpt = array(); if(!$this->SmtpConnect()) { return false; } - $smtp_from = ($this->Sender == "") ? $this->From : $this->Sender; + $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender; if(!$this->smtp->Mail($smtp_from)) { $error = $this->Lang('from_failed') . $smtp_from; $this->SetError($error); @@ -585,7 +596,7 @@ class PHPMailer { $port = $this->Port; } - if($this->smtp->Connect(((!empty($this->SMTPSecure))?$this->SMTPSecure.'://':"").$host, $port, $this->Timeout)) { + if($this->smtp->Connect(((!empty($this->SMTPSecure))?$this->SMTPSecure.'://':'').$host, $port, $this->Timeout)) { if ($this->Helo != '') { $this->smtp->Hello($this->Helo); } else { @@ -692,6 +703,9 @@ class PHPMailer { */ 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) { @@ -699,10 +713,10 @@ class PHPMailer { } $line = explode($this->LE, $message); - $message = ""; + $message = ''; for ($i=0 ;$i < count($line); $i++) { $line_part = explode(' ', $line[$i]); - $buf = ""; + $buf = ''; for ($e = 0; $e $length)) { @@ -710,9 +724,11 @@ class PHPMailer { if ($e != 0) { if ($space_left > 20) { $len = $space_left; - if (substr($word, $len - 1, 1) == '=') { + if ($is_utf8) { + $len = $this->UTF8CharBoundary($word, $len); + } elseif (substr($word, $len - 1, 1) == "=") { $len--; - } elseif (substr($word, $len - 2, 1) == '=') { + } elseif (substr($word, $len - 2, 1) == "=") { $len -= 2; } $part = substr($word, 0, $len); @@ -722,13 +738,15 @@ class PHPMailer { } else { $message .= $buf . $soft_break; } - $buf = ""; + $buf = ''; } while (strlen($word) > 0) { $len = $length; - if (substr($word, $len - 1, 1) == '=') { + if ($is_utf8) { + $len = $this->UTF8CharBoundary($word, $len); + } elseif (substr($word, $len - 1, 1) == "=") { $len--; - } elseif (substr($word, $len - 2, 1) == '=') { + } elseif (substr($word, $len - 2, 1) == "=") { $len -= 2; } $part = substr($word, 0, $len); @@ -756,6 +774,47 @@ class PHPMailer { 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 @@ -784,7 +843,7 @@ class PHPMailer { * @return string */ function CreateHeader() { - $result = ""; + $result = ''; /* Set the boundaries */ $uniq_id = md5(uniqid(time())); @@ -792,7 +851,7 @@ class PHPMailer { $this->boundary[2] = 'b2_' . $uniq_id; $result .= $this->HeaderLine('Date', $this->RFCDate()); - if($this->Sender == "") { + if($this->Sender == '') { $result .= $this->HeaderLine('Return-Path', trim($this->From)); } else { $result .= $this->HeaderLine('Return-Path', trim($this->Sender)); @@ -834,7 +893,11 @@ class PHPMailer { $result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject))); } - $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE); + 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 . ']'); @@ -846,8 +909,21 @@ class PHPMailer { for($index = 0; $index < count($this->CustomHeader); $index++) { $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1]))); } - $result .= $this->HeaderLine('MIME-Version', '1.0'); + 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); @@ -882,16 +958,19 @@ class PHPMailer { * @return string */ function CreateBody() { - $result = ""; + $result = ''; + if ($this->sign_key_file) { + $result .= $this->GetMailMIME(); + } $this->SetWordWrap(); switch($this->message_type) { case 'alt': - $result .= $this->GetBoundary($this->boundary[1], "", 'text/plain', ""); + $result .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); $result .= $this->EncodeString($this->AltBody, $this->Encoding); $result .= $this->LE.$this->LE; - $result .= $this->GetBoundary($this->boundary[1], "", 'text/html', ""); + $result .= $this->GetBoundary($this->boundary[1], '', 'text/html', ''); $result .= $this->EncodeString($this->Body, $this->Encoding); $result .= $this->LE.$this->LE; $result .= $this->EndBoundary($this->boundary[1]); @@ -900,7 +979,7 @@ class PHPMailer { $result .= $this->EncodeString($this->Body, $this->Encoding); break; case 'attachments': - $result .= $this->GetBoundary($this->boundary[1], "", "", ""); + $result .= $this->GetBoundary($this->boundary[1], '', '', ''); $result .= $this->EncodeString($this->Body, $this->Encoding); $result .= $this->LE; $result .= $this->AttachAll(); @@ -908,18 +987,37 @@ class PHPMailer { case 'alt_attachments': $result .= sprintf("--%s%s", $this->boundary[1], $this->LE); $result .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE.$this->LE); - $result .= $this->GetBoundary($this->boundary[2], "", 'text/plain', "") . $this->LE; // Create text body + $result .= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; // Create text body $result .= $this->EncodeString($this->AltBody, $this->Encoding); $result .= $this->LE.$this->LE; - $result .= $this->GetBoundary($this->boundary[2], "", 'text/html', "") . $this->LE; // Create the HTML body + $result .= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; // Create the HTML body $result .= $this->EncodeString($this->Body, $this->Encoding); $result .= $this->LE.$this->LE; $result .= $this->EndBoundary($this->boundary[2]); $result .= $this->AttachAll(); break; } + if($this->IsError()) { - $result = ""; + $result = ''; + } else if ($this->sign_key_file) { + $file = tempnam("", "mail"); + $fp = fopen($file, "w"); + fwrite($fp, $result); + 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)) { + $fp = fopen($signed, "r"); + $result = fread($fp, filesize($this->sign_key_file)); + fclose($fp); + } else { + $this->SetError($this->Lang("signing").openssl_error_string()); + $result = ''; + } + + unlink($file); + unlink($signed); } return $result; @@ -930,14 +1028,14 @@ class PHPMailer { * @access private */ function GetBoundary($boundary, $charSet, $contentType, $encoding) { - $result = ""; - if($charSet == "") { + $result = ''; + if($charSet == '') { $charSet = $this->CharSet; } - if($contentType == "") { + if($contentType == '') { $contentType = $this->ContentType; } - if($encoding == "") { + if($encoding == '') { $encoding = $this->Encoding; } $result .= $this->TextLine('--' . $boundary); @@ -1009,14 +1107,14 @@ class PHPMailer { * @param string $type File extension (MIME) type. * @return bool */ - function AddAttachment($path, $name = "", $encoding = 'base64', $type = 'application/octet-stream') { + function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { if(!@is_file($path)) { $this->SetError($this->Lang('file_access') . $path); return false; } $filename = basename($path); - if($name == "") { + if($name == '') { $name = $filename; } @@ -1074,13 +1172,13 @@ class PHPMailer { if($bString) { $mime[] = $this->EncodeString($string, $encoding); if($this->IsError()) { - return ""; + return ''; } $mime[] = $this->LE.$this->LE; } else { $mime[] = $this->EncodeFile($path, $encoding); if($this->IsError()) { - return ""; + return ''; } $mime[] = $this->LE.$this->LE; } @@ -1088,7 +1186,7 @@ class PHPMailer { $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE); - return join("", $mime); + return join('', $mime); } /** @@ -1100,7 +1198,7 @@ class PHPMailer { function EncodeFile ($path, $encoding = 'base64') { if(!@$fd = fopen($path, 'rb')) { $this->SetError($this->Lang('file_open') . $path); - return ""; + return ''; } $magic_quotes = get_magic_quotes_runtime(); set_magic_quotes_runtime(0); @@ -1119,7 +1217,7 @@ class PHPMailer { * @return string */ function EncodeString ($str, $encoding = 'base64') { - $encoded = ""; + $encoded = ''; switch(strtolower($encoding)) { case 'base64': /* chunk_split is found in PHP >= 3.0.6 */ @@ -1182,9 +1280,15 @@ class PHPMailer { /* Try to select the encoding which should produce the shortest output */ if (strlen($str)/3 < $x) { $encoding = 'B'; - $encoded = base64_encode($str); - $maxlen -= $maxlen % 4; - $encoded = trim(chunk_split($encoded, $maxlen, "\n")); + if (function_exists('mb_strlen') && $this->HasMultiBytes($str)) { + // Use a custom function which correctly encodes and wraps long + // multibyte strings without breaking lines within a character + $encoded = $this->Base64EncodeWrapMB($str); + } else { + $encoded = base64_encode($str); + $maxlen -= $maxlen % 4; + $encoded = trim(chunk_split($encoded, $maxlen, "\n")); + } } else { $encoding = 'Q'; $encoded = $this->EncodeQ($str, $position); @@ -1198,20 +1302,74 @@ class PHPMailer { return $encoded; } + /** + * Checks if a string contains multibyte characters. + * @access private + * @param string $str multi-byte text to wrap encode + * @return bool + */ + function HasMultiBytes($str) { + if (function_exists('mb_strlen')) { + return (strlen($str) > mb_strlen($str, $this->CharSet)); + } else { // Assume no multibytes (we can't handle without mbstring functions anyway) + return False; + } + } + + /** + * Correctly encodes and wraps long multibyte strings for mail headers + * without breaking lines within a character. + * Adapted from a function by paravoid at http://uk.php.net/manual/en/function.mb-encode-mimeheader.php + * @access private + * @param string $str multi-byte text to wrap encode + * @return string + */ + function Base64EncodeWrapMB($str) { + $start = "=?".$this->CharSet."?B?"; + $end = "?="; + $encoded = ""; + + $mb_length = mb_strlen($str, $this->CharSet); + // Each line must have length <= 75, including $start and $end + $length = 75 - strlen($start) - strlen($end); + // Average multi-byte ratio + $ratio = $mb_length / strlen($str); + // Base64 has a 4:3 ratio + $offset = $avgLength = floor($length * $ratio * .75); + + for ($i = 0; $i < $mb_length; $i += $offset) { + $lookBack = 0; + + do { + $offset = $avgLength - $lookBack; + $chunk = mb_substr($str, $i, $offset, $this->CharSet); + $chunk = base64_encode($chunk); + $lookBack++; + } + while (strlen($chunk) > $length); + + $encoded .= $chunk . $this->LE; + } + + // Chomp the last linefeed + $encoded = substr($encoded, 0, -strlen($this->LE)); + return $encoded; + } + /** * Encode string to quoted-printable. * @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"; $escape = '='; - $output = ""; + $output = ''; while( list(, $line) = each($lines) ) { $linlen = strlen($line); - $newline = ""; + $newline = ''; for($i = 0; $i < $linlen; $i++) { $c = substr( $line, $i, 1 ); $dec = ord( $c ); @@ -1231,7 +1389,7 @@ class PHPMailer { } if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay - $newline = ""; + $newline = ''; // check if newline first character will be point or not if ( $dec == 46 ) { $c = '=2E'; @@ -1251,7 +1409,7 @@ class PHPMailer { */ function EncodeQ ($str, $position = 'text') { /* There should not be any EOL in the string */ - $encoded = preg_replace("[\r\n]", "", $str); + $encoded = preg_replace("[\r\n]", '', $str); switch (strtolower($position)) { case 'phrase': @@ -1309,7 +1467,7 @@ class PHPMailer { * @param string $type File extension (MIME) type. * @return bool */ - function AddEmbeddedImage($path, $cid, $name = "", $encoding = 'base64', $type = 'application/octet-stream') { + function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { if(!@is_file($path)) { $this->SetError($this->Lang('file_access') . $path); @@ -1317,7 +1475,7 @@ class PHPMailer { } $filename = basename($path); - if($name == "") { + if($name == '') { $name = $filename; } @@ -1467,7 +1625,7 @@ class PHPMailer { if(isset($_SERVER[$varName])) { return $_SERVER[$varName]; } else { - return ""; + return ''; } } @@ -1538,23 +1696,31 @@ class PHPMailer { * @access public * @return $message */ - function MsgHTML($message) { + function MsgHTML($message,$basedir='') { preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images); if(isset($images[2])) { foreach($images[2] as $i => $url) { - $filename = basename($url); - $directory = dirname($url); - $cid = 'cid:' . md5($filename); - $fileParts = split("\.", $filename); - $ext = $fileParts[1]; - $mimeType = $this->_mime_types($ext); - $message = preg_replace("/".$images[1][$i]."=\"".preg_quote($url, '/')."\"/Ui", $images[1][$i]."=\"".$cid."\"", $message); - $this->AddEmbeddedImage($url, md5($filename), $filename, 'base64', $mimeType); + // do not change urls for absolute images (thanks to corvuscorax) + if (!preg_match('/^[A-z][A-z]*:\/\//',$url)) { + $filename = basename($url); + $directory = dirname($url); + ($directory == '.')?$directory='':''; + $cid = 'cid:' . md5($filename); + $fileParts = split("\.", $filename); + $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 ( $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->Body = $message; - $textMsg = trim(strip_tags($message)); + $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message))); if ( !empty($textMsg) && empty($this->AltBody) ) { $this->AltBody = $textMsg; } @@ -1568,7 +1734,7 @@ class PHPMailer { * @access private * @return mime type of ext */ - function _mime_types($ext = "") { + function _mime_types($ext = '') { $mimes = array( 'hqx' => 'application/mac-binhex40', 'cpt' => 'application/mac-compactpro', @@ -1658,7 +1824,7 @@ class PHPMailer { 'xl' => 'application/excel', 'eml' => 'message/rfc822' ); - return ( ! isset($mimes[strtolower($ext)])) ? 'application/x-unknown-content-type' : $mimes[strtolower($ext)]; + return ( ! isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)]; } /** @@ -1672,7 +1838,7 @@ class PHPMailer { * @param mixed $value Parameter Value * NOTE: will not work with arrays, there are no arrays to set/reset */ - function set ( $name, $value = "" ) { + function set ( $name, $value = '' ) { if ( isset($this->$name) ) { $this->$name = $value; } else { @@ -1688,7 +1854,7 @@ class PHPMailer { * @param string $filename Parameter File Name */ function getFile($filename) { - $return = ""; + $return = ''; if ($fp = fopen($filename, 'rb')) { while (!feof($fp)) { $return .= fread($fp, 1024); @@ -1713,6 +1879,18 @@ class PHPMailer { return $str; } + /** + * Set the private key file and password to sign the message. + * + * @access public + * @param string $key_filename Parameter File Name + * @param string $key_pass Password for private key + */ + function Sign($key_filename, $key_pass) { + $this->sign_key_file = $key_filename; + $this->sign_key_pass = $key_pass; + } + } ?>