diff options
| author | Łukasz Wilenski <wooc@gazeta.pl> | 2011-10-26 16:46:03 +0000 |
|---|---|---|
| committer | Łukasz Wilenski <wooc@gazeta.pl> | 2011-10-26 16:46:03 +0000 |
| commit | aebdce9e1d86a7ec80e7906258cc897cd21f7a3c (patch) | |
| tree | d780ae620e0cef17a2a2132becad7afbb446fe3f /library | |
| parent | 6532783671bd74d87207ecc11c1a4ffa9c245f0f (diff) | |
| download | webtrees-aebdce9e1d86a7ec80e7906258cc897cd21f7a3c.tar.gz webtrees-aebdce9e1d86a7ec80e7906258cc897cd21f7a3c.tar.bz2 webtrees-aebdce9e1d86a7ec80e7906258cc897cd21f7a3c.zip | |
update phpmailer class from 5.1 to 5.2
Diffstat (limited to 'library')
| -rw-r--r-- | library/phpmailer/class.phpmailer.php | 789 | ||||
| -rw-r--r-- | library/phpmailer/class.smtp.php | 25 | ||||
| -rw-r--r-- | library/phpmailer/language/phpmailer.lang-pl.php | 39 |
3 files changed, 497 insertions, 356 deletions
diff --git a/library/phpmailer/class.phpmailer.php b/library/phpmailer/class.phpmailer.php index 99caa4ef32..3c4f95bcd4 100644 --- a/library/phpmailer/class.phpmailer.php +++ b/library/phpmailer/class.phpmailer.php @@ -2,15 +2,15 @@ /*~ class.phpmailer.php .---------------------------------------------------------------------------. | Software: PHPMailer - PHP email class | -| Version: 5.1 | -| Contact: via sourceforge.net support pages (also www.worxware.com) | -| Info: http://phpmailer.sourceforge.net | -| Support: http://sourceforge.net/projects/phpmailer/ | +| Version: 5.2 | +| Site: https://code.google.com/a/apache-extras.org/p/phpmailer/ | | ------------------------------------------------------------------------- | -| Admin: Andy Prevost (project admininistrator) | +| Admin: Jim Jagielski (project admininistrator) | | Authors: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net | | : Marcus Bointon (coolbru) coolbru@users.sourceforge.net | +| : Jim Jagielski (jimjag) jimjag@gmail.com | | Founder: Brent R. Matzelle (original founder) | +| Copyright (c) 2010-2011, Jim Jagielski. All Rights Reserved. | | Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. | | Copyright (c) 2001-2003, Brent R. Matzelle | | ------------------------------------------------------------------------- | @@ -19,11 +19,6 @@ | This program is distributed in the hope that it will be useful - WITHOUT | | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | | FITNESS FOR A PARTICULAR PURPOSE. | -| ------------------------------------------------------------------------- | -| We offer a number of paid services (www.worxware.com): | -| - Web Hosting on highly optimized fast and secure servers | -| - Technology Consulting | -| - Oursourcing (highly qualified programmers and graphic designers) | '---------------------------------------------------------------------------' */ @@ -33,6 +28,8 @@ * @package PHPMailer * @author Andy Prevost * @author Marcus Bointon + * @author Jim Jagielski + * @copyright 2010 - 2011 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost * @version $Id$ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License @@ -119,6 +116,20 @@ class PHPMailer { public $AltBody = ''; /** + * Stores the complete compiled MIME message body. + * @var string + * @access protected + */ + protected $MIMEBody = ''; + + /** + * Stores the complete compiled MIME message headers. + * @var string + * @access protected + */ + protected $MIMEHeader = ''; + + /** * Sets word wrapping on the body of the message to a given number of * characters. * @var int @@ -163,7 +174,7 @@ class PHPMailer { * If empty, a unique id will be generated. * @var string */ - public $MessageID = ''; + public $MessageID = ''; ///////////////////////////////////////////////// // PROPERTIES FOR SMTP @@ -177,19 +188,19 @@ class PHPMailer { * Hosts will be tried in order. * @var string */ - public $Host = 'localhost'; + public $Host = 'localhost'; /** * Sets the default SMTP server port. * @var int */ - public $Port = 25; + public $Port = 25; /** * Sets the SMTP HELO of the message (Default is $Hostname). * @var string */ - public $Helo = ''; + public $Helo = ''; /** * Sets connection prefix. @@ -202,32 +213,32 @@ class PHPMailer { * Sets SMTP authentication. Utilizes the Username and Password variables. * @var bool */ - public $SMTPAuth = false; + public $SMTPAuth = false; /** * Sets SMTP username. * @var string */ - public $Username = ''; + public $Username = ''; /** * Sets SMTP password. * @var string */ - public $Password = ''; + public $Password = ''; /** * Sets the SMTP server timeout in seconds. * This function will not work with the win32 version. * @var int */ - public $Timeout = 10; + public $Timeout = 10; /** * Sets SMTP class debugging on or off. * @var bool */ - public $SMTPDebug = false; + public $SMTPDebug = false; /** * Prevents the SMTP connection from being closed after each mail @@ -242,9 +253,9 @@ class PHPMailer { * emails, instead of sending to entire TO addresses * @var bool */ - public $SingleTo = false; + public $SingleTo = false; - /** + /** * If SingleTo is true, this provides the array to hold the email addresses * @var bool */ @@ -271,6 +282,12 @@ class PHPMailer { /** * Used with DKIM DNS Resource Record + * @var string + */ + public $DKIM_passphrase = ''; + + /** + * Used with DKIM DNS Resource Record * optional, in format of email address 'you@yourdomain.com' * @var string */ @@ -300,28 +317,34 @@ class PHPMailer { * Sets the PHPMailer Version number * @var string */ - public $Version = '5.1'; + public $Version = '5.2'; + + /** + * What to use in the X-Mailer header + * @var string + */ + public $XMailer = ''; ///////////////////////////////////////////////// // PROPERTIES, PRIVATE AND PROTECTED ///////////////////////////////////////////////// - private $smtp = NULL; - private $to = array(); - private $cc = array(); - private $bcc = array(); - private $ReplyTo = array(); - private $all_recipients = array(); - private $attachment = array(); - private $CustomHeader = array(); - private $message_type = ''; - private $boundary = array(); - protected $language = array(); - private $error_count = 0; - private $sign_cert_file = ""; - private $sign_key_file = ""; - private $sign_key_pass = ""; - private $exceptions = false; + protected $smtp = NULL; + protected $to = array(); + protected $cc = array(); + protected $bcc = array(); + protected $ReplyTo = array(); + protected $all_recipients = array(); + protected $attachment = array(); + protected $CustomHeader = array(); + protected $message_type = ''; + protected $boundary = array(); + protected $language = array(); + protected $error_count = 0; + protected $sign_cert_file = ''; + protected $sign_key_file = ''; + protected $sign_key_pass = ''; + protected $exceptions = false; ///////////////////////////////////////////////// // CONSTANTS @@ -389,9 +412,9 @@ class PHPMailer { */ public function IsQmail() { if (stristr(ini_get('sendmail_path'), 'qmail')) { - $this->Sendmail = '/var/qmail/bin/sendmail'; + $this->Sendmail = '/var/qmail/bin/sendmail'; } - $this->Mailer = 'sendmail'; + $this->Mailer = 'sendmail'; } ///////////////////////////////////////////////// @@ -447,11 +470,15 @@ class PHPMailer { * @param string $address The email address to send to * @param string $name * @return boolean true on success, false if address already used or invalid in some way - * @access private + * @access protected */ - private function AddAnAddress($kind, $address, $name = '') { + protected function AddAnAddress($kind, $address, $name = '') { if (!preg_match('/^(to|cc|bcc|ReplyTo)$/', $kind)) { - echo 'Invalid recipient array: ' . kind; + $this->SetError($this->Lang('Invalid recipient array').': '.$kind); + if ($this->exceptions) { + throw new phpmailerException('Invalid recipient array: ' . $kind); + } + echo $this->Lang('Invalid recipient array').': '.$kind; return false; } $address = trim($address); @@ -485,7 +512,7 @@ class PHPMailer { * @param string $name * @return boolean */ - public function SetFrom($address, $name = '',$auto=1) { + public function SetFrom($address, $name = '', $auto = 1) { $address = trim($address); $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim if (!self::ValidateAddress($address)) { @@ -544,45 +571,72 @@ class PHPMailer { */ public function Send() { try { - if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { - throw new phpmailerException($this->Lang('provide_address'), self::STOP_CRITICAL); + if(!$this->PreSend()) return false; + return $this->PostSend(); + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + return false; } + } - // Set whether the message is multipart/alternative - if(!empty($this->AltBody)) { - $this->ContentType = 'multipart/alternative'; - } + protected function PreSend() { + try { + if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { + throw new phpmailerException($this->Lang('provide_address'), self::STOP_CRITICAL); + } - $this->error_count = 0; // reset errors - $this->SetMessageType(); - $header = $this->CreateHeader(); - $body = $this->CreateBody(); + // Set whether the message is multipart/alternative + if(!empty($this->AltBody)) { + $this->ContentType = 'multipart/alternative'; + } + $this->error_count = 0; // reset errors + $this->SetMessageType(); + //Refuse to send an empty message if (empty($this->Body)) { throw new phpmailerException($this->Lang('empty_message'), self::STOP_CRITICAL); - } + } + + $this->MIMEHeader = $this->CreateHeader(); + $this->MIMEBody = $this->CreateBody(); + // digitally sign with DKIM if enabled if ($this->DKIM_domain && $this->DKIM_private) { - $header_dkim = $this->DKIM_Add($header,$this->Subject,$body); - $header = str_replace("\r\n","\n",$header_dkim) . $header; + $header_dkim = $this->DKIM_Add($this->MIMEHeader, $this->EncodeHeader($this->SecureHeader($this->Subject)), $this->MIMEBody); + $this->MIMEHeader = str_replace("\r\n", "\n", $header_dkim) . $this->MIMEHeader; } - // Choose the mailer and send through it - switch($this->Mailer) { - case 'sendmail': - return $this->SendmailSend($header, $body); - case 'smtp': - return $this->SmtpSend($header, $body); - default: - return $this->MailSend($header, $body); + return true; + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + return false; } + } + + protected function PostSend() { + try { + // Choose the mailer and send through it + switch($this->Mailer) { + case 'sendmail': + return $this->SendmailSend($this->MIMEHeader, $this->MIMEBody); + case 'smtp': + return $this->SmtpSend($this->MIMEHeader, $this->MIMEBody); + default: + return $this->MailSend($this->MIMEHeader, $this->MIMEBody); + } } catch (phpmailerException $e) { $this->SetError($e->getMessage()); if ($this->exceptions) { throw $e; - } + } echo $e->getMessage()."\n"; return false; } @@ -603,19 +657,19 @@ class PHPMailer { } if ($this->SingleTo === true) { foreach ($this->SingleToArray as $key => $val) { - if(!@$mail = popen($sendmail, 'w')) { + if(!@$mail = popen($sendmail, 'w')) { throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } + } fputs($mail, "To: " . $val . "\n"); - fputs($mail, $header); - fputs($mail, $body); - $result = pclose($mail); + fputs($mail, $header); + fputs($mail, $body); + $result = pclose($mail); // implement call back function if it exists $isSent = ($result == 0) ? 1 : 0; - $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); if($result != 0) { throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } + } } } else { if(!@$mail = popen($sendmail, 'w')) { @@ -626,10 +680,10 @@ class PHPMailer { $result = pclose($mail); // implement call back function if it exists $isSent = ($result == 0) ? 1 : 0; - $this->doCallback($isSent,$this->to,$this->cc,$this->bcc,$this->Subject,$body); - if($result != 0) { + $this->doCallback($isSent, $this->to, $this->cc, $this->bcc, $this->Subject, $body); + if($result != 0) { throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } + } } return true; } @@ -648,8 +702,12 @@ class PHPMailer { } $to = implode(', ', $toArr); - $params = sprintf("-oi -f %s", $this->Sender); - if ($this->Sender != '' && strlen(ini_get('safe_mode'))< 1) { + if (empty($this->Sender)) { + $params = "-oi -f %s"; + } else { + $params = sprintf("-oi -f %s", $this->Sender); + } + if ($this->Sender != '' and !ini_get('safe_mode')) { $old_from = ini_get('sendmail_from'); ini_set('sendmail_from', $this->Sender); if ($this->SingleTo === true && count($toArr) > 1) { @@ -657,13 +715,13 @@ class PHPMailer { $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); // implement call back function if it exists $isSent = ($rt == 1) ? 1 : 0; - $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); } } else { $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); // implement call back function if it exists $isSent = ($rt == 1) ? 1 : 0; - $this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $to, $this->cc, $this->bcc, $this->Subject, $body); } } else { if ($this->SingleTo === true && count($toArr) > 1) { @@ -671,13 +729,13 @@ class PHPMailer { $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); // implement call back function if it exists $isSent = ($rt == 1) ? 1 : 0; - $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); } } else { $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header); // implement call back function if it exists $isSent = ($rt == 1) ? 1 : 0; - $this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $to, $this->cc, $this->bcc, $this->Subject, $body); } } if (isset($old_from)) { @@ -699,8 +757,6 @@ class PHPMailer { * @return bool */ protected function SmtpSend($header, $body) { - $SMTP_HELO=get_site_setting('SMTP_HELO'); - $SMTP_AUTH_USER=get_site_setting('SMTP_AUTH_USER'); require_once $this->PluginDir . 'class.smtp.php'; $bad_rcpt = array(); @@ -709,19 +765,7 @@ class PHPMailer { } $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender; if(!$this->smtp->Mail($smtp_from)) { - if (strstr($SMTP_AUTH_USER, "@")!==False) { - $from_user = $SMTP_AUTH_USER; - } else { - $from_user = $SMTP_AUTH_USER.'@'.$SMTP_HELO; - } - if($this->smtp->Mail($from_user)) { - $smtp_from = $from_user; - } else { - $error = $this->Lang('from_failed') . $smtp_from; - $this->SetError($error); - $this->smtp->Reset(); - throw new phpmailerException($this->Lang('from_failed') . $smtp_from, self::STOP_CRITICAL);; - } + throw new phpmailerException($this->Lang('from_failed') . $smtp_from, self::STOP_CRITICAL); } // Attempt to send attach all recipients @@ -730,11 +774,11 @@ class PHPMailer { $bad_rcpt[] = $to[0]; // implement call back function if it exists $isSent = 0; - $this->doCallback($isSent,$to[0],'','',$this->Subject,$body); + $this->doCallback($isSent, $to[0], '', '', $this->Subject, $body); } else { // implement call back function if it exists $isSent = 1; - $this->doCallback($isSent,$to[0],'','',$this->Subject,$body); + $this->doCallback($isSent, $to[0], '', '', $this->Subject, $body); } } foreach($this->cc as $cc) { @@ -742,11 +786,11 @@ class PHPMailer { $bad_rcpt[] = $cc[0]; // implement call back function if it exists $isSent = 0; - $this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body); + $this->doCallback($isSent, '', $cc[0], '', $this->Subject, $body); } else { // implement call back function if it exists $isSent = 1; - $this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body); + $this->doCallback($isSent, '', $cc[0], '', $this->Subject, $body); } } foreach($this->bcc as $bcc) { @@ -754,11 +798,11 @@ class PHPMailer { $bad_rcpt[] = $bcc[0]; // implement call back function if it exists $isSent = 0; - $this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body); + $this->doCallback($isSent, '', '', $bcc[0], $this->Subject, $body); } else { // implement call back function if it exists $isSent = 1; - $this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body); + $this->doCallback($isSent, '', '', $bcc[0], $this->Subject, $body); } } @@ -766,7 +810,7 @@ class PHPMailer { if (count($bad_rcpt) > 0 ) { //Create error message for any bad addresses $badaddresses = implode(', ', $bad_rcpt); throw new phpmailerException($this->Lang('recipients_failed') . $badaddresses); - } + } if(!$this->smtp->Data($header . $body)) { throw new phpmailerException($this->Lang('data_not_accepted'), self::STOP_CRITICAL); } @@ -796,44 +840,44 @@ class PHPMailer { // Retry while there is no connection try { while($index < count($hosts) && !$connection) { - $hostinfo = array(); + $hostinfo = array(); if (preg_match('/^(.+):([0-9]+)$/', $hosts[$index], $hostinfo)) { - $host = $hostinfo[1]; - $port = $hostinfo[2]; - } else { - $host = $hosts[$index]; - $port = $this->Port; - } + $host = $hostinfo[1]; + $port = $hostinfo[2]; + } else { + $host = $hosts[$index]; + $port = $this->Port; + } - $tls = ($this->SMTPSecure == 'tls'); - $ssl = ($this->SMTPSecure == 'ssl'); + $tls = ($this->SMTPSecure == 'tls'); + $ssl = ($this->SMTPSecure == 'ssl'); - if($this->smtp->Connect(($ssl ? 'ssl://':'').$host, $port, $this->Timeout)) { + if ($this->smtp->Connect(($ssl ? 'ssl://':'').$host, $port, $this->Timeout)) { - $hello = ($this->Helo != '' ? $this->Helo : $this->ServerHostname()); - $this->smtp->Hello($hello); + $hello = ($this->Helo != '' ? $this->Helo : $this->ServerHostname()); + $this->smtp->Hello($hello); - if($tls) { - if(!$this->smtp->StartTLS()) { + if ($tls) { + if (!$this->smtp->StartTLS()) { throw new phpmailerException($this->Lang('tls')); - } + } //We must resend HELO after tls negotiation - $this->smtp->Hello($hello); - } + $this->smtp->Hello($hello); + } - $connection = true; - if($this->SMTPAuth) { - if(!$this->smtp->Authenticate($this->Username, $this->Password)) { + $connection = true; + if ($this->SMTPAuth) { + if (!$this->smtp->Authenticate($this->Username, $this->Password)) { throw new phpmailerException($this->Lang('authenticate')); + } } } - } - $index++; - if(!$connection) { + $index++; + if (!$connection) { throw new phpmailerException($this->Lang('connect_host')); - } - } + } + } } catch (phpmailerException $e) { $this->smtp->Reset(); throw $e; @@ -858,9 +902,9 @@ class PHPMailer { * Sets the language for all class error messages. * Returns false if it cannot load the language file. The default language is English. * @param string $langcode ISO 639-1 2-character language code (e.g. Portuguese: "br") - * @param string $lang_path Path to the language file directory - * @access public - */ + * @param string $lang_path Path to the language file directory + * @access public + */ function SetLanguage($langcode = 'en', $lang_path = 'language/') { //Define full set of translatable strings $PHPMAILER_LANG = array( @@ -886,7 +930,7 @@ class PHPMailer { $l = true; if ($langcode != 'en') { //There is no English translation file $l = @include $lang_path.'phpmailer.lang-'.$langcode.'.php'; - } + } $this->language = $PHPMAILER_LANG; return ($l == true); //Returns false if language not found } @@ -913,7 +957,7 @@ class PHPMailer { $addresses = array(); foreach ($addr as $a) { $addresses[] = $this->AddrFormat($a); - } + } $addr_str .= implode(', ', $addresses); $addr_str .= $this->LE; @@ -926,7 +970,7 @@ class PHPMailer { * @return string */ public function AddrFormat($addr) { - if(empty($addr[1])) { + if (empty($addr[1])) { return $this->SecureHeader($addr[0]); } else { return $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">"; @@ -956,7 +1000,7 @@ class PHPMailer { $line = explode($this->LE, $message); $message = ''; - for ($i=0 ;$i < count($line); $i++) { + for ($i = 0 ;$i < count($line); $i++) { $line_part = explode(' ', $line[$i]); $buf = ''; for ($e = 0; $e<count($line_part); $e++) { @@ -1070,7 +1114,9 @@ class PHPMailer { switch($this->message_type) { case 'alt': - case 'alt_attachments': + case 'alt_inline': + case 'alt_attach': + case 'alt_inline_attach': $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); break; default: @@ -1091,6 +1137,7 @@ class PHPMailer { $uniq_id = md5(uniqid(time())); $this->boundary[1] = 'b1_' . $uniq_id; $this->boundary[2] = 'b2_' . $uniq_id; + $this->boundary[3] = 'b3_' . $uniq_id; $result .= $this->HeaderLine('Date', self::RFCDate()); if($this->Sender == '') { @@ -1106,13 +1153,13 @@ class PHPMailer { $this->SingleToArray[] = $this->AddrFormat($t); } } else { - 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->to) > 0) { + $result .= $this->AddrAppend('To', $this->to); + } elseif (count($this->cc) == 0) { + $result .= $this->HeaderLine('To', 'undisclosed-recipients:;'); + } } } - } $from = array(); $from[0][0] = trim($this->From); @@ -1139,12 +1186,16 @@ class PHPMailer { } if($this->MessageID != '') { - $result .= $this->HeaderLine('Message-ID',$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 '.$this->Version.' (phpmailer.worxware.com)'); + if($this->XMailer) { + $result .= $this->HeaderLine('X-Mailer', $this->XMailer); + } else { + $result .= $this->HeaderLine('X-Mailer', 'PHPMailer '.$this->Version.' (http://code.google.com/a/apache-extras.org/p/phpmailer/)'); + } if($this->ConfirmReadingTo != '') { $result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>'); @@ -1172,18 +1223,21 @@ class PHPMailer { 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); + $result .= $this->TextLine('Content-Type: '.$this->ContentType.'; charset="'.$this->CharSet.'"'); break; - case 'attachments': - 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] . '"'); - } + case 'inline': + $result .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + case 'attach': + case 'inline_attach': + case 'alt_attach': + case 'alt_inline_attach': + $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); break; case 'alt': + case 'alt_inline': $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); break; @@ -1211,6 +1265,33 @@ class PHPMailer { $this->SetWordWrap(); switch($this->message_type) { + case 'plain': + $body .= $this->EncodeString($this->Body, $this->Encoding); + break; + case 'inline': + $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[1]); + break; + case 'attach': + $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; + case 'inline_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[2]); + $body .= $this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; case 'alt': $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); $body .= $this->EncodeString($this->AltBody, $this->Encoding); @@ -1220,50 +1301,80 @@ class PHPMailer { $body .= $this->LE.$this->LE; $body .= $this->EndBoundary($this->boundary[1]); break; - case 'plain': + case 'alt_inline': + $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', ''); $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[2]); + $body .= $this->LE; + $body .= $this->EndBoundary($this->boundary[1]); break; - case 'attachments': - $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + case 'alt_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', ''); $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->EndBoundary($this->boundary[2]); $body .= $this->LE; - $body .= $this->AttachAll(); + $body .= $this->AttachAll("attachment", $this->boundary[1]); break; - case 'alt_attachments': - $body .= sprintf("--%s%s", $this->boundary[1], $this->LE); - $body .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE.$this->LE); - $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; // Create text body + case 'alt_inline_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', ''); $body .= $this->EncodeString($this->AltBody, $this->Encoding); $body .= $this->LE.$this->LE; - $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; // Create the HTML body + $body .= $this->TextLine("--" . $this->boundary[2]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[3] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[3], '', 'text/html', ''); $body .= $this->EncodeString($this->Body, $this->Encoding); $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[3]); + $body .= $this->LE; $body .= $this->EndBoundary($this->boundary[2]); - $body .= $this->AttachAll(); + $body .= $this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); break; } - if($this->IsError()) { + if ($this->IsError()) { $body = ''; - } else if ($this->sign_key_file) { + } elseif ($this->sign_key_file) { try { $file = tempnam('', 'mail'); file_put_contents($file, $body); //TODO check this worked - $signed = tempnam("", "signed"); + $signed = tempnam("", "signed"); if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), NULL)) { @unlink($file); @unlink($signed); $body = file_get_contents($signed); - } else { + } else { @unlink($file); @unlink($signed); throw new phpmailerException($this->Lang("signing").openssl_error_string()); - } + } } catch (phpmailerException $e) { $body = ''; if ($this->exceptions) { throw $e; - } + } } } @@ -1272,9 +1383,10 @@ class PHPMailer { /** * Returns the start of a message boundary. - * @access private + * @access protected + * @return string */ - private function GetBoundary($boundary, $charSet, $contentType, $encoding) { + protected function GetBoundary($boundary, $charSet, $contentType, $encoding) { $result = ''; if($charSet == '') { $charSet = $this->CharSet; @@ -1286,7 +1398,7 @@ class PHPMailer { $encoding = $this->Encoding; } $result .= $this->TextLine('--' . $boundary); - $result .= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet); + $result .= sprintf("Content-Type: %s; charset=\"%s\"", $contentType, $charSet); $result .= $this->LE; $result .= $this->HeaderLine('Content-Transfer-Encoding', $encoding); $result .= $this->LE; @@ -1296,31 +1408,25 @@ class PHPMailer { /** * Returns the end of a message boundary. - * @access private + * @access protected + * @return string */ - private function EndBoundary($boundary) { + protected function EndBoundary($boundary) { return $this->LE . '--' . $boundary . '--' . $this->LE; } /** * Sets the message type. - * @access private + * @access protected * @return void */ - private function SetMessageType() { - if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) { - $this->message_type = 'plain'; - } else { - if(count($this->attachment) > 0) { - $this->message_type = 'attachments'; - } - if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) { - $this->message_type = 'alt'; - } - if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) { - $this->message_type = 'alt_attachments'; - } - } + protected function SetMessageType() { + $this->message_type = array(); + if($this->AlternativeExists()) $this->message_type[] = "alt"; + if($this->InlineImageExists()) $this->message_type[] = "inline"; + if($this->AttachmentExists()) $this->message_type[] = "attach"; + $this->message_type = implode("_", $this->message_type); + if($this->message_type == "") $this->message_type = "plain"; } /** @@ -1357,13 +1463,13 @@ class PHPMailer { */ public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { try { - if(!@is_file($path)) { + if ( !@is_file($path) ) { throw new phpmailerException($this->Lang('file_access') . $path, self::STOP_CONTINUE); - } - $filename = basename($path); - if($name == '') { - $name = $filename; - } + } + $filename = basename($path); + if ( $name == '' ) { + $name = $filename; + } $this->attachment[] = array( 0 => $path, @@ -1400,10 +1506,10 @@ class PHPMailer { /** * Attaches all fs, string, and binary attachments to the message. * Returns an empty string on failure. - * @access private + * @access protected * @return string */ - private function AttachAll() { + protected function AttachAll($disposition_type, $boundary) { // Return text of body $mime = array(); $cidUniq = array(); @@ -1411,54 +1517,58 @@ class PHPMailer { // Add all attachments foreach ($this->attachment as $attachment) { - // Check for string attachment - $bString = $attachment[5]; - if ($bString) { - $string = $attachment[0]; - } else { - $path = $attachment[0]; - } + // CHECK IF IT IS A VALID DISPOSITION_FILTER + if($attachment[6] == $disposition_type) { + // Check for string attachment + $bString = $attachment[5]; + if ($bString) { + $string = $attachment[0]; + } else { + $path = $attachment[0]; + } - if (in_array($attachment[0], $incl)) { continue; } - $filename = $attachment[1]; - $name = $attachment[2]; - $encoding = $attachment[3]; - $type = $attachment[4]; - $disposition = $attachment[6]; - $cid = $attachment[7]; - $incl[] = $attachment[0]; - if ( $disposition == 'inline' && isset($cidUniq[$cid]) ) { continue; } - $cidUniq[$cid] = true; + $inclhash = md5(serialize($attachment)); + if (in_array($inclhash, $incl)) { continue; } + $incl[] = $inclhash; + $filename = $attachment[1]; + $name = $attachment[2]; + $encoding = $attachment[3]; + $type = $attachment[4]; + $disposition = $attachment[6]; + $cid = $attachment[7]; + if ( $disposition == 'inline' && isset($cidUniq[$cid]) ) { continue; } + $cidUniq[$cid] = true; - $mime[] = sprintf("--%s%s", $this->boundary[1], $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); + $mime[] = sprintf("--%s%s", $boundary, $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); - } + if($disposition == 'inline') { + $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); + } - $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($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) { - $mime[] = $this->EncodeString($string, $encoding); - if($this->IsError()) { - return ''; - } - $mime[] = $this->LE.$this->LE; - } else { - $mime[] = $this->EncodeFile($path, $encoding); - if($this->IsError()) { - return ''; + // Encode as string attachment + if($bString) { + $mime[] = $this->EncodeString($string, $encoding); + if($this->IsError()) { + return ''; + } + $mime[] = $this->LE.$this->LE; + } else { + $mime[] = $this->EncodeFile($path, $encoding); + if($this->IsError()) { + return ''; + } + $mime[] = $this->LE.$this->LE; } - $mime[] = $this->LE.$this->LE; } } - $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE); + $mime[] = sprintf("--%s--%s", $boundary, $this->LE); - return join('', $mime); + return implode("", $mime); } /** @@ -1467,31 +1577,33 @@ class PHPMailer { * @param string $path The full path to the file * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' * @see EncodeFile() - * @access private + * @access protected * @return string */ - private function EncodeFile($path, $encoding = 'base64') { + protected function EncodeFile($path, $encoding = 'base64') { try { if (!is_readable($path)) { throw new phpmailerException($this->Lang('file_open') . $path, self::STOP_CONTINUE); - } - if (function_exists('get_magic_quotes')) { + } + if (function_exists('get_magic_quotes')) { function get_magic_quotes() { - return false; + return false; } -} - if (version_compare(PHP_VERSION, '5.3', '<')) { - $magic_quotes = get_magic_quotes_runtime(); - set_magic_quotes_runtime(0); - } - $file_buffer = file_get_contents($path); - $file_buffer = $this->EncodeString($file_buffer, $encoding); - if (version_compare(PHP_VERSION, '5.3', '<')) { set_magic_quotes_runtime($magic_quotes); } - return $file_buffer; + } + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + $magic_quotes = get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + } + $file_buffer = file_get_contents($path); + $file_buffer = $this->EncodeString($file_buffer, $encoding); + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + set_magic_quotes_runtime($magic_quotes); + } + return $file_buffer; } catch (Exception $e) { $this->SetError($e->getMessage()); return ''; - } + } } /** @@ -1502,7 +1614,7 @@ class PHPMailer { * @access public * @return string */ - public function EncodeString ($str, $encoding = 'base64') { + public function EncodeString($str, $encoding = 'base64') { $encoded = ''; switch(strtolower($encoding)) { case 'base64': @@ -1533,7 +1645,7 @@ class PHPMailer { * @access public * @return string */ - public function EncodeHeader ($str, $position = 'text') { + public function EncodeHeader($str, $position = 'text') { $x = 0; switch (strtolower($position)) { @@ -1567,8 +1679,8 @@ class PHPMailer { if (strlen($str)/3 < $x) { $encoding = 'B'; 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 + // 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); @@ -1651,7 +1763,7 @@ class PHPMailer { * @return string */ public function EncodeQPphp( $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'); + $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 = '='; @@ -1732,7 +1844,7 @@ class PHPMailer { * @access public * @return string */ - public function EncodeQ ($str, $position = 'text') { + public function EncodeQ($str, $position = 'text') { // There should not be any EOL in the string $encoded = preg_replace('/[\r\n]*/', '', $str); @@ -1747,7 +1859,7 @@ class PHPMailer { // Replace every high ascii, control =, ? and _ characters //TODO using /e (equivalent to eval()) is probably not a good idea $encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e', - "'='.sprintf('%02X', ord('\\1'))", $encoded); + "'='.sprintf('%02X', ord(stripslashes('\\1')))", $encoded); break; } @@ -1796,13 +1908,13 @@ class PHPMailer { */ public function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { - if(!@is_file($path)) { + if ( !@is_file($path) ) { $this->SetError($this->Lang('file_access') . $path); return false; } $filename = basename($path); - if($name == '') { + if ( $name == '' ) { $name = $filename; } @@ -1821,6 +1933,20 @@ class PHPMailer { return true; } + public function AddStringEmbeddedImage($string, $cid, $filename = '', $encoding = 'base64', $type = 'application/octet-stream') { + // Append to $attachment array + $this->attachment[] = array( + 0 => $string, + 1 => $filename, + 2 => basename($filename), + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => 'inline', + 7 => $cid + ); + } + /** * Returns true if an inline attachment is present. * @access public @@ -1835,6 +1961,19 @@ class PHPMailer { return false; } + public function AttachmentExists() { + foreach($this->attachment as $attachment) { + if ($attachment[6] == 'attachment') { + return true; + } + } + return false; + } + + public function AlternativeExists() { + return strlen($this->AltBody)>0; + } + ///////////////////////////////////////////////// // CLASS METHODS, MESSAGE RESET ///////////////////////////////////////////////// @@ -1947,10 +2086,10 @@ class PHPMailer { /** * Returns the server hostname or 'localhost.localdomain' if unknown. - * @access private + * @access protected * @return string */ - private function ServerHostname() { + protected function ServerHostname() { if (!empty($this->Hostname)) { $result = $this->Hostname; } elseif (isset($_SERVER['SERVER_NAME'])) { @@ -1964,10 +2103,10 @@ class PHPMailer { /** * Returns a message in the appropriate language. - * @access private + * @access protected * @return string */ - private function Lang($key) { + protected function Lang($key) { if(count($this->language) < 1) { $this->SetLanguage('en'); // set the default language } @@ -1990,10 +2129,10 @@ class PHPMailer { /** * Changes every end of line from CR or LF to CRLF. - * @access private + * @access public * @return string */ - private function FixEOL($str) { + public function FixEOL($str) { $str = str_replace("\r\n", "\n", $str); $str = str_replace("\r", "\n", $str); $str = str_replace("\n", $this->LE, $str); @@ -2014,21 +2153,21 @@ class PHPMailer { * @access public * @return $message */ - public function MsgHTML($message,$basedir='') { + public function MsgHTML($message, $basedir = '') { preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images); if(isset($images[2])) { foreach($images[2] as $i => $url) { // do not change urls for absolute images (thanks to corvuscorax) - if (!preg_match('#^[A-z]+://#',$url)) { + if (!preg_match('#^[A-z]+://#', $url)) { $filename = basename($url); $directory = dirname($url); - ($directory == '.')?$directory='':''; + ($directory == '.') ? $directory='': ''; $cid = 'cid:' . md5($filename); $ext = pathinfo($filename, PATHINFO_EXTENSION); $mimeType = self::_mime_types($ext); - if ( strlen($basedir) > 1 && substr($basedir,-1) != '/') { $basedir .= '/'; } - if ( strlen($directory) > 1 && substr($directory,-1) != '/') { $directory .= '/'; } - if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64',$mimeType) ) { + if ( strlen($basedir) > 1 && substr($basedir, -1) != '/') { $basedir .= '/'; } + 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); } } @@ -2036,11 +2175,11 @@ class PHPMailer { } $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) ) { + $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s', '', $message))); + if (!empty($textMsg) && empty($this->AltBody)) { $this->AltBody = html_entity_decode($textMsg); } - if ( empty($this->AltBody) ) { + if (empty($this->AltBody)) { $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . "\n\n"; } } @@ -2142,36 +2281,36 @@ class PHPMailer { 'xl' => 'application/excel', 'eml' => 'message/rfc822' ); - return ( ! isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)]; + return (!isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)]; } /** - * Set (or reset) Class Objects (variables) - * - * Usage Example: - * $page->set('X-Priority', '3'); - * - * @access public - * @param string $name Parameter Name - * @param mixed $value Parameter Value - * NOTE: will not work with arrays, there are no arrays to set/reset + * Set (or reset) Class Objects (variables) + * + * Usage Example: + * $page->set('X-Priority', '3'); + * + * @access public + * @param string $name Parameter Name + * @param mixed $value Parameter Value + * NOTE: will not work with arrays, there are no arrays to set/reset * @todo Should this not be using __set() magic function? - */ - public function set ( $name, $value = '' ) { + */ + public function set($name, $value = '') { try { - if ( isset($this->$name) ) { - $this->$name = $value; - } else { + if (isset($this->$name) ) { + $this->$name = $value; + } else { throw new phpmailerException($this->Lang('variable_set') . $name, self::STOP_CRITICAL); } } catch (Exception $e) { $this->SetError($e->getMessage()); if ($e->getCode() == self::STOP_CRITICAL) { - return false; + return false; + } } - } return true; - } + } /** * Strips newlines to prevent header injection. @@ -2206,15 +2345,15 @@ class PHPMailer { * @param string $key_pass Password for private key */ public function DKIM_QP($txt) { - $tmp=""; - $line=""; - for ($i=0;$i<strlen($txt);$i++) { - $ord=ord($txt[$i]); + $tmp = ''; + $line = ''; + for ($i = 0; $i < strlen($txt); $i++) { + $ord = ord($txt[$i]); if ( ((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E)) ) { - $line.=$txt[$i]; + $line .= $txt[$i]; } else { - $line.="=".sprintf("%02X",$ord); -} + $line .= "=".sprintf("%02X", $ord); + } } return $line; } @@ -2227,8 +2366,8 @@ class PHPMailer { */ public function DKIM_Sign($s) { $privKeyStr = file_get_contents($this->DKIM_private); - if ($this->DKIM_passphrase!='') { - $privKey = openssl_pkey_get_private($privKeyStr,$this->DKIM_passphrase); + if ($this->DKIM_passphrase != '') { + $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase); } else { $privKey = $privKeyStr; } @@ -2244,15 +2383,15 @@ class PHPMailer { * @param string $s Header */ public function DKIM_HeaderC($s) { - $s=preg_replace("/\r\n\s+/"," ",$s); - $lines=explode("\r\n",$s); - foreach ($lines as $key=>$line) { - list($heading,$value)=explode(":",$line,2); - $heading=strtolower($heading); - $value=preg_replace("/\s+/"," ",$value) ; // Compress useless spaces - $lines[$key]=$heading.":".trim($value) ; // Don't forget to remove WSP around the value + $s = preg_replace("/\r\n\s+/", " ", $s); + $lines = explode("\r\n", $s); + foreach ($lines as $key => $line) { + list($heading, $value) = explode(":", $line, 2); + $heading = strtolower($heading); + $value = preg_replace("/\s+/", " ", $value) ; // Compress useless spaces + $lines[$key] = $heading.":".trim($value) ; // Don't forget to remove WSP around the value } - $s=implode("\r\n",$lines); + $s = implode("\r\n", $lines); return $s; } @@ -2265,11 +2404,11 @@ class PHPMailer { public function DKIM_BodyC($body) { if ($body == '') return "\r\n"; // stabilize line endings - $body=str_replace("\r\n","\n",$body); - $body=str_replace("\n","\r\n",$body); + $body = str_replace("\r\n", "\n", $body); + $body = str_replace("\n", "\r\n", $body); // END stabilize line endings - while (substr($body,strlen($body)-4,4) == "\r\n\r\n") { - $body=substr($body,0,strlen($body)-2); + while (substr($body, strlen($body) - 4, 4) == "\r\n\r\n") { + $body = substr($body, 0, strlen($body) - 2); } return $body; } @@ -2282,23 +2421,23 @@ class PHPMailer { * @param string $subject Subject * @param string $body Body */ - public function DKIM_Add($headers_line,$subject,$body) { + public function DKIM_Add($headers_line, $subject, $body) { $DKIMsignatureType = 'rsa-sha1'; // Signature & hash algorithms $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body $DKIMquery = 'dns/txt'; // Query method $DKIMtime = time() ; // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone) $subject_header = "Subject: $subject"; - $headers = explode("\r\n",$headers_line); + $headers = explode($this->LE, $headers_line); foreach($headers as $header) { - if (strpos($header,'From:') === 0) { - $from_header=$header; - } elseif (strpos($header,'To:') === 0) { - $to_header=$header; + if (strpos($header, 'From:') === 0) { + $from_header = $header; + } elseif (strpos($header, 'To:') === 0) { + $to_header = $header; } } - $from = str_replace('|','=7C',$this->DKIM_QP($from_header)); - $to = str_replace('|','=7C',$this->DKIM_QP($to_header)); - $subject = str_replace('|','=7C',$this->DKIM_QP($subject_header)) ; // Copied header fields (dkim-quoted-printable + $from = str_replace('|', '=7C', $this->DKIM_QP($from_header)); + $to = str_replace('|', '=7C', $this->DKIM_QP($to_header)); + $subject = str_replace('|', '=7C', $this->DKIM_QP($subject_header)) ; // Copied header fields (dkim-quoted-printable $body = $this->DKIM_BodyC($body); $DKIMlen = strlen($body) ; // Length of body $DKIMb64 = base64_encode(pack("H*", sha1($body))) ; // Base64 of packed binary SHA-1 hash of body @@ -2317,10 +2456,10 @@ class PHPMailer { return "X-PHPMAILER-DKIM: phpmailer.worxware.com\r\n".$dkimhdrs.$signed."\r\n"; } - protected function doCallback($isSent,$to,$cc,$bcc,$subject,$body) { + protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body) { if (!empty($this->action_function) && function_exists($this->action_function)) { - $params = array($isSent,$to,$cc,$bcc,$subject,$body); - call_user_func_array($this->action_function,$params); + $params = array($isSent, $to, $cc, $bcc, $subject, $body); + call_user_func_array($this->action_function, $params); } } } diff --git a/library/phpmailer/class.smtp.php b/library/phpmailer/class.smtp.php index 6d3f24eff8..22d8e951d8 100644 --- a/library/phpmailer/class.smtp.php +++ b/library/phpmailer/class.smtp.php @@ -2,15 +2,15 @@ /*~ class.smtp.php .---------------------------------------------------------------------------. | Software: PHPMailer - PHP email class | -| Version: 5.1 | -| Contact: via sourceforge.net support pages (also www.codeworxtech.com) | -| Info: http://phpmailer.sourceforge.net | -| Support: http://sourceforge.net/projects/phpmailer/ | +| Version: 5.2 | +| Site: https://code.google.com/a/apache-extras.org/p/phpmailer/ | | ------------------------------------------------------------------------- | -| Admin: Andy Prevost (project admininistrator) | +| Admin: Jim Jagielski (project admininistrator) | | Authors: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net | | : Marcus Bointon (coolbru) coolbru@users.sourceforge.net | +| : Jim Jagielski (jimjag) jimjag@gmail.com | | Founder: Brent R. Matzelle (original founder) | +| Copyright (c) 2010-2011, Jim Jagielski. All Rights Reserved. | | Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. | | Copyright (c) 2001-2003, Brent R. Matzelle | | ------------------------------------------------------------------------- | @@ -19,11 +19,6 @@ | This program is distributed in the hope that it will be useful - WITHOUT | | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | | FITNESS FOR A PARTICULAR PURPOSE. | -| ------------------------------------------------------------------------- | -| We offer a number of paid services (www.codeworxtech.com): | -| - Web Hosting on highly optimized fast and secure servers | -| - Technology Consulting | -| - Oursourcing (highly qualified programmers and graphic designers) | '---------------------------------------------------------------------------' */ @@ -34,6 +29,8 @@ * @author Andy Prevost * @author Marcus Bointon * @copyright 2004 - 2008 Andy Prevost + * @author Jim Jagielski + * @copyright 2010 - 2011 Jim Jagielski * @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL) * @version $Id$ */ @@ -71,6 +68,12 @@ class SMTP { */ public $do_verp = false; + /** + * Sets the SMTP PHPMailer Version number + * @var string + */ + public $Version = '5.2'; + ///////////////////////////////////////////////// // PROPERTIES, PRIVATE AND PROTECTED ///////////////////////////////////////////////// @@ -811,4 +814,4 @@ class SMTP { } -?>
\ No newline at end of file +?> diff --git a/library/phpmailer/language/phpmailer.lang-pl.php b/library/phpmailer/language/phpmailer.lang-pl.php index a6fd225817..6e9a82fda6 100644 --- a/library/phpmailer/language/phpmailer.lang-pl.php +++ b/library/phpmailer/language/phpmailer.lang-pl.php @@ -3,23 +3,22 @@ * PHPMailer language file: refer to English translation for definitive list * Polish Version */ - -$PHPMAILER_LANG['authenticate'] = 'Błąd SMTP: Nie można przeprowadzić uwierzytelniania.'; -$PHPMAILER_LANG['connect_host'] = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Błąd SMTP: Dane nie zostały przyjęte.'; -$PHPMAILER_LANG['empty_message'] = 'Pusta treść wiadomości'; -$PHPMAILER_LANG['encoding'] = 'Nieznany sposób kodowania znaków: '; -$PHPMAILER_LANG['execute'] = 'Nie można uruchomić: '; -$PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: '; -$PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: '; -$PHPMAILER_LANG['from_failed'] = 'Następujący adres Nadawcy jest jest nieprawidłowy: '; -$PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.'; -$PHPMAILER_LANG['invalid_email'] = 'Nie wysłano, adres email jest nieprawidłowy: '; -$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email Odbiorcy.'; -$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłania wiadomości nie jest obsługiwana.'; -$PHPMAILER_LANG['recipients_failed'] = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi: '; -$PHPMAILER_LANG['signing'] = 'Błąd logowania: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Funkcja SMTP Connect() nie powiodła się.'; -$PHPMAILER_LANG['smtp_error'] = 'Błąd serwera SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'Nie można ustawić lub zresetować zmiennej: '; -?>
\ No newline at end of file +$PHPMAILER_LANG = array( + 'provide_address' => 'Należy podać prawidłowy adres email Odbiorcy.', + 'mailer_not_supported' => 'Wybrana metoda wysyłania wiadomości nie jest obsługiwana.', + 'execute' => 'Nie można uruchomić: ', + 'instantiate' => 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.', + 'authenticate' => 'Błąd SMTP: Nie można przeprowadzić uwierzytelniania.', + 'from_failed' => 'Następujący adres Nadawcy jest jest nieprawidłowy: ', + 'recipients_failed' => 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi: ', + 'data_not_accepted' => 'Błąd SMTP: Dane nie zostały przyjęte.', + 'connect_host' => 'Błąd SMTP: Nie można połączyć się z wybranym hostem.', + 'file_access' => 'Brak dostępu do pliku: ', + 'file_open' => 'Nie można otworzyć pliku: ', + 'encoding' => 'Nieznany sposób kodowania znaków: ', + 'signing' => 'Błąd logowania: ', + 'smtp_error' => 'Błąd serwera SMTP: ', + 'empty_message' => 'Pusta treść wiadomości', + 'invalid_address' => 'Adres email jest nieprawidłowy', + 'variable_set' => 'Nie można ustawić lub zresetować zmiennej: ' +);
\ No newline at end of file |
