}
function prepareRFC822_Header($rfc822_header, $reply_rfc822_header, &$raw_length) {
- $REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
- $SERVER_NAME = $_SERVER['SERVER_NAME'];
- $REMOTE_PORT = $_SERVER['REMOTE_PORT'];
- if(isset($_SERVER['REMOTE_HOST'])) {
- $REMOTE_HOST = $_SERVER['REMOTE_HOST'];
- }
- if(isset($_SERVER['HTTP_VIA'])) {
- $HTTP_VIA = $_SERVER['HTTP_VIA'];
- }
- if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
- $HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR'];
- }
- global $version, $username;
+ global $domain, $version, $username;
+
+ /* if server var SERVER_NAME not available, use $domain */
+ if(!sqGetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER)) {
+ $SERVER_NAME = $domain;
+ }
+
+ sqGetGlobalVar('REMOTE_ADDR', $REMOTE_ADDR, SQ_SERVER);
+ sqGetGlobalVar('REMOTE_PORT', $REMOTE_PORT, SQ_SERVER);
+ sqGetGlobalVar('REMOTE_HOST', $REMOTE_HOST, SQ_SERVER);
+ sqGetGlobalVar('HTTP_VIA', $HTTP_VIA, SQ_SERVER);
+ sqGetGlobalVar('HTTP_X_FORWARDED_FOR', $HTTP_X_FORWARDED_FOR, SQ_SERVER);
+
$rn = "\r\n";
+
/* This creates an RFC 822 date */
$date = date('D, j M Y H:i:s ', mktime()) . $this->timezone();
/* Create a message-id */
}
$header[] = "Date: $date" . $rn;
$header[] = 'Subject: '.encodeHeader($rfc822_header->subject) . $rn;
- $header[] = 'From: '. encodeHeader($rfc822_header->getAddr_s('from')) . $rn;
+ $header[] = 'From: '. $rfc822_header->getAddr_s('from',',',true) . $rn;
/* RFC2822 if from contains more then 1 address */
if (count($rfc822_header->from) > 1) {
- $header[] = 'Sender: '. encodeHeader($rfc822_header->getAddr_s('sender')) . $rn;
+ $header[] = 'Sender: '. $rfc822_header->getAddr_s('sender',',',true) . $rn;
}
if (count($rfc822_header->to)) {
- $header[] = 'To: '. encodeHeader($rfc822_header->getAddr_s('to')) . $rn;
+ $header[] = 'To: '. $rfc822_header->getAddr_s('to',',',true) . $rn;
}
if (count($rfc822_header->cc)) {
- $header[] = 'Cc: '. encodeHeader($rfc822_header->getAddr_s('cc')) . $rn;
+ $header[] = 'Cc: '. $rfc822_header->getAddr_s('cc',',',true) . $rn;
}
if (count($rfc822_header->reply_to)) {
- $header[] = 'Reply-To: '. encodeHeader($rfc822_header->getAddr_s('reply_to')) . $rn;
+ $header[] = 'Reply-To: '. $rfc822_header->getAddr_s('reply_to',',',true) . $rn;
}
/* Sendmail should return true. Default = false */
$bcc = $this->getBcc();
if (count($rfc822_header->bcc)) {
- $s = 'Bcc: '. encodeHeader($rfc822_header->getAddr_s('bcc')) . $rn;
+ $s = 'Bcc: '. $rfc822_header->getAddr_s('bcc',',',true) . $rn;
if (!$bcc) {
$s = $this->foldLine($s, 78, str_pad('',4));
$raw_length += strlen($s);
while (strlen($line) > $length) {
$fold = false;
/* handle encoded parts */
- if (preg_match('/(=\?.+\?.+\?.+\?=)/',$line,$regs)) {
+ if (preg_match('/(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)(.*)/Ui',$line,$regs)) {
$fold_tmp = $regs[1];
$iPosEnc = strpos($line,$fold_tmp);
$iLengthEnc = strlen($fold_tmp);
- if ($iPosEnc < $length && ($iPosEnc + $iLengthEnc > $length)) {
+ if ($iPosEnc < $length && (($iPosEnc + $iLengthEnc) > $length)) {
$fold = true;
/* fold just before the start of the encoded string */
$aFoldLine[] = substr($line,0,$iPosEnc);
}
if ($iLengthEnc > $length) { /* place the encoded
string on a separate line and do not fold inside it*/
- if ($iLengthEnc < (998 - strlen($fold_string))) {
- $aFoldLine[] = substr($line,0,$iLengthEnc);
- $line = substr($line,$iLengthEnc);
- } else { /* line is too long, continue with normal folding */
- $fold = false;
- }
- }
+ /* minimize foldstring */
+ $fold_string = "\r\n ";
+ $aFoldLine[] = substr($line,0,$iLengthEnc);
+ $line = substr($line,$iLengthEnc);
+ }
} else { /* the encoded string fits into the foldlength */
/*remainder */
$iPosEncEnd = $iPosEnc+$iLengthEnc;
$sLineRem = substr($line,$iPosEncEnd,$length - $iPosEncEnd);
- if (!preg_match('/[=,;\s]/',$sLineRem)) {
+ if (preg_match('/(=\?([^?]*)\?(Q|B)\?([^?]*)\?=)(.*)/Ui',$slineRem) || !preg_match('/[=,;\s]/',$sLineRem)) {
/*impossible to fold clean in the next part -> fold after the enc string */
$aFoldLine[] = substr($line,0,$iPosEncEnd+1);
$line = substr($line,$iPosEncEnd+1);
$bFirstFold = true;
$length -= strlen($fold_string);
}
- }
+ }
}
}
if (!$fold) {
}
$line = implode($fold_string,$aFoldLine);
}
+
return $line."\r\n";
}