You are here

public function PHPMailer::EncodeHeader in SMTP Authentication Support 7.2

Same name and namespace in other branches
  1. 5 smtp.module \PHPMailer::EncodeHeader()
  2. 7 smtp.phpmailer.inc \PHPMailer::EncodeHeader()

Encode a header string to best (shortest) of Q, B, quoted or none. @access public

Return value

string

4 calls to PHPMailer::EncodeHeader()
PHPMailer::AddrFormat in ./smtp.phpmailer.inc
Formats an address correctly. @access public
PHPMailer::AttachAll in ./smtp.phpmailer.inc
Attaches all fs, string, and binary attachments to the message. Returns an empty string on failure. @access private
PHPMailer::CreateHeader in ./smtp.phpmailer.inc
Assembles message header. @access public
PHPMailer::MailSend in ./smtp.phpmailer.inc
Sends mail using the PHP mail() function.

File

./smtp.phpmailer.inc, line 1510
The mail handler class in smtp module, based on code of the phpmailer library, customized and relicensed to GPLv2.

Class

PHPMailer
PHPMailer - PHP email transport class NOTE: Requires PHP version 5 or later @package PHPMailer @author Andy Prevost @author Marcus Bointon @copyright 2004 - 2009 Andy Prevost

Code

public function EncodeHeader($str, $position = 'text') {
  $x = 0;
  switch (strtolower($position)) {
    case 'phrase':
      if (!preg_match('/[\\200-\\377]/', $str)) {

        // Can't use addslashes as we don't know what value has magic_quotes_sybase
        $encoded = addcslashes($str, "\0..\37\\\"");
        if ($str == $encoded && !preg_match('/[^A-Za-z0-9!#$%&\'*+\\/=?^_`{|}~ -]/', $str)) {
          return $encoded;
        }
        else {
          return "\"{$encoded}\"";
        }
      }
      $x = preg_match_all('/[^\\040\\041\\043-\\133\\135-\\176]/', $str, $matches);
      break;
    case 'comment':
      $x = preg_match_all('/[()"]/', $str, $matches);

    // Fall-through
    case 'text':
    default:
      $x += preg_match_all('/[\\000-\\010\\013\\014\\016-\\037\\177-\\377]/', $str, $matches);
      break;
  }
  if ($x == 0) {
    return $str;
  }
  $maxlen = 75 - 7 - strlen($this->CharSet);

  // Try to select the encoding which should produce the shortest output
  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
      $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);
    $encoded = $this
      ->WrapText($encoded, $maxlen, TRUE);
    $encoded = str_replace('=' . $this->LE, "\n", trim($encoded));
  }
  $encoded = preg_replace('/^(.*)$/m', " =?" . $this->CharSet . "?{$encoding}?\\1?=", $encoded);
  $encoded = trim(str_replace("\n", $this->LE, $encoded));
  return $encoded;
}