/**
  * @access private
  */
 function _setAllParams()
 {
     $contentType = $this->GetContentTypeCharset();
     if ($contentType && strlen($contentType) > 0) {
         $this->HasCharset = true;
     }
     $GLOBALS[MailInputCharset] = isset($GLOBALS[MailInputCharset]) && $GLOBALS[MailInputCharset] != '' ? $GLOBALS[MailInputCharset] : $this->GetContentTypeCharset();
     if ($GLOBALS[MailInputCharset]) {
         $this->HasCharset = true;
     }
     $GLOBALS[MailInputCharset] = $GLOBALS[MailInputCharset] ? $GLOBALS[MailInputCharset] : $GLOBALS[MailDefaultCharset];
     if ($this->IsMimeMail()) {
         $this->ReparseAllHeader($GLOBALS[MailInputCharset]);
         $this->TextBodies = new TextBodyCollection($this);
         $this->Attachments = new AttachmentCollection($this);
     } else {
         $this->ReparseAllHeader($GLOBALS[MailInputCharset]);
         preg_match('/\\nbegin [\\d]* ([.]*)/i', $this->_body, $preg);
         if (count($preg) > 0) {
             $firstBegin = strpos($this->_body, 'begin');
             $this->TextBodies->PlainTextBodyPart = ConvertUtils::ConvertEncoding(substr($this->_body, 0, $firstBegin - 1), $GLOBALS[MailInputCharset], $GLOBALS[MailOutputCharset]);
             $parts = explode("\n" . 'end', substr($this->_body, $firstBegin));
             $this->_body = '';
             for ($i = 0, $c = count($parts); $i < $c; $i++) {
                 $parts[$i] = trim($parts[$i]);
                 if (strlen($parts[$i]) == '') {
                     continue;
                 }
                 $startBody = strpos($parts[$i], CRLF);
                 $firstLine = substr($parts[$i], 0, $startBody);
                 //$filename = substr($firstLine, 10);
                 $filename = preg_replace('/begin [\\d]* ([.]*)/i', '\\1', $firstLine);
                 $newMimePart = new MimePart();
                 $newMimePart->Headers->SetHeaderByName(MIMEConst_ContentType, ConvertUtils::GetContentTypeFromFileName($filename) . ';' . CRLF . "\t" . MIMEConst_NameLower . '="' . $filename . '"');
                 $newMimePart->Headers->SetHeaderByName(MIMEConst_ContentTransferEncoding, 'x-uue');
                 $newMimePart->Headers->SetHeaderByName(MIMEConst_ContentDisposition, MIMEConst_AttachmentLower . ';' . CRLF . "\t" . MIMEConst_FilenameLower . '="' . $filename . '"');
                 $newMimePart->_body = $parts[$i] . CRLF . 'end' . CRLF;
                 $this->Attachments->List->Add(new Attachment($newMimePart));
                 unset($newMimePart, $parts[$i]);
             }
         } else {
             $TEXTLIMIT = 150000;
             /*if (strlen($this->_body) > $TEXTLIMIT)
             					{
             						$this->_body = substr($this->_body, 0, $TEXTLIMIT).
             ' <-------------------------------------->
             Message text is truncated here because it\'s too long. If you need to
             view full message text, you can dowload it locally by clicking "Save"
             button in "Full View" mode and open via any local mailer (e.g. Outlook Express).';
             					}*/
             $this->TextBodies->PlainTextBodyPart = ConvertUtils::ConvertEncoding($this->_body, $GLOBALS[MailInputCharset], $GLOBALS[MailOutputCharset]);
         }
     }
 }
Exemple #2
0
    header('Pragma: public');
    header('Content-type: application/octet-stream; charset=utf-8');
    //header('Content-Type: application/force-download');
    header('Content-Type: application/download');
    header('Accept-Ranges: bytes');
    header('Content-Disposition: attachment; filename="' . $fileNameToSave . '.eml"');
    header('Content-Transfer-Encoding: binary');
} elseif (isset($_SESSION[ACCOUNT_ID], $_GET['tn'])) {
    $fs =& new FileSystem(INI_DIR . '/temp', $account->Email, $_SESSION[ACCOUNT_ID]);
    $folder =& new Folder($_SESSION[ACCOUNT_ID], -1, $_SESSION['attachtempdir']);
    $tempName = ConvertUtils::ClearFileName($_GET['tn']);
    $data = $fs->LoadBinaryAttach($folder, $tempName);
    if (isset($_GET['filename'])) {
        $filename = ConvertUtils::ClearFileName(urldecode($_GET['filename']));
        $filename = $filename ? $filename : 'attachmentname';
        // IE
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Type: application/octet-stream; charset=' . $account->GetUserCharset());
        header('Content-Type: application/download');
        header('Accept-Ranges: bytes');
        header('Content-Disposition: attachment; filename="' . $filename . '"');
        header('Content-Transfer-Encoding: binary');
    } else {
        header('Content-Type: ' . ConvertUtils::GetContentTypeFromFileName($tempName));
    }
} else {
    exit;
}
echo $data;
 /**
  * @access private
  */
 function _setAllParams()
 {
     $contentTypeCharset = $this->GetContentTypeCharset();
     $contentTypeCharset = strtolower($contentTypeCharset) == 'us-ascii' ? '' : $contentTypeCharset;
     if ($contentTypeCharset && strlen($contentTypeCharset) > 0) {
         $this->HasCharset = true;
     }
     $GLOBALS[MailInputCharset] = isset($GLOBALS[MailInputCharset]) && $GLOBALS[MailInputCharset] != '' ? $GLOBALS[MailInputCharset] : $contentTypeCharset;
     if ($GLOBALS[MailInputCharset]) {
         $this->HasCharset = true;
     }
     $GLOBALS[MailInputCharset] = $GLOBALS[MailInputCharset] ? $GLOBALS[MailInputCharset] : $GLOBALS[MailDefaultCharset];
     if ($this->IsMimeMail()) {
         $this->ReparseAllHeader($GLOBALS[MailInputCharset]);
         $this->TextBodies = new TextBodyCollection($this);
         $this->Attachments = new AttachmentCollection($this);
     } else {
         $this->ReparseAllHeader($GLOBALS[MailInputCharset]);
         $preg = array();
         preg_match('/\\nbegin [\\d]* ([.]*)/i', $this->_body, $preg);
         if (count($preg) > 0) {
             $firstBegin = strpos($this->_body, 'begin');
             $this->TextBodies->PlainTextBodyPart = ConvertUtils::ConvertEncoding(substr($this->_body, 0, $firstBegin - 1), $GLOBALS[MailInputCharset], $GLOBALS[MailOutputCharset]);
             $parts = explode("\n" . 'end', substr($this->_body, $firstBegin));
             $this->_body = '';
             for ($i = 0, $c = count($parts); $i < $c; $i++) {
                 $parts[$i] = trim($parts[$i]);
                 if (strlen($parts[$i]) == 0) {
                     continue;
                 }
                 $startBody = strpos($parts[$i], CRLF);
                 $firstLine = substr($parts[$i], 0, $startBody);
                 $filename = preg_replace('/begin [\\d]* ([.]*)/i', '\\1', $firstLine);
                 $newMimePart = new MimePart();
                 $newMimePart->Headers->SetHeaderByName(MIMEConst_ContentType, ConvertUtils::GetContentTypeFromFileName($filename) . '; ' . CRLF . "\t" . MIMEConst_NameLower . '="' . $filename . '"');
                 $newMimePart->Headers->SetHeaderByName(MIMEConst_ContentTransferEncoding, 'x-uue');
                 $newMimePart->Headers->SetHeaderByName(MIMEConst_ContentDisposition, MIMEConst_AttachmentLower . ';' . CRLF . "\t" . MIMEConst_FilenameLower . '="' . $filename . '"');
                 $newMimePart->_body = $parts[$i] . CRLF . 'end' . CRLF;
                 $this->Attachments->List->Add(new Attachment($newMimePart));
                 unset($newMimePart, $parts[$i]);
             }
         } else {
             $_strLen = strlen($this->_body);
             if (!isset($GLOBALS[MIMEConst_DoNotUseMTrim]) && $_strLen > MIMEConst_TrimBodyLen_Bytes) {
                 $this->_body = substr($this->_body, 0, MIMEConst_TrimBodyLen_Bytes);
                 $GLOBALS[MIMEConst_IsBodyTrim] = true;
             }
             $this->TextBodies->PlainTextBodyPart = ConvertUtils::ConvertEncoding($this->_body, $GLOBALS[MailInputCharset], $GLOBALS[MailOutputCharset]);
         }
     }
 }
 function GetMessageNode(&$_xmlRes, &$_message, &$_folder, &$_processor, &$_account, &$_settings, $_mode, $_charsetNum, $_isFromSave)
 {
     $_safety = true;
     $_messageNode = new XmlDomNode('message');
     $_msgId = $_message->IdMsg;
     $_msgUid = $_message->Uid;
     $_messageInfo = new CMessageInfo();
     $_messageInfo->SetInfo($_msgId, $_msgUid, $_folder->IdDb, $_folder->FullName);
     $_messageClassType = $_message->TextBodies->ClassType();
     $_messageNode->AppendAttribute('id', $_msgId);
     $_messageNode->AppendAttribute('size', $_message->GetMailSize());
     $_messageNode->AppendAttribute('html', (int) (($_messageClassType & 2) == 2));
     $_messageNode->AppendAttribute('plain', (int) (($_messageClassType & 1) == 1));
     $_messageNode->AppendAttribute('priority', $_message->GetPriorityStatus());
     $_messageNode->AppendAttribute('mode', $_mode);
     $_messageNode->AppendAttribute('charset', $_charsetNum);
     $_messageNode->AppendAttribute('has_charset', (int) $_message->HasCharset);
     $_messageNode->AppendAttribute('downloaded', (int) $_message->Downloaded);
     $_messageNode->AppendAttribute('sensivity', $_message->GetSensitivity());
     $maf =& MessageActionFilters::CreateInstance();
     $mafNoReply = $maf->GetNoReplyEmails();
     $mafNoReplyAll = $maf->GetNoReplyAllEmails();
     $mafNoForward = $maf->GetNoForwardEmails();
     $fromEmail = $_message->GetFrom();
     $fromEmail = $fromEmail->Email;
     $_textCharset = $_message->GetTextCharset();
     $_rtl = 0;
     if (null !== $_textCharset) {
         switch (ConvertUtils::GetCodePageNumber($_textCharset)) {
             case 1255:
             case 1256:
             case 28596:
             case 28598:
                 $_rtl = 1;
                 break;
         }
     }
     $_messageNode->AppendAttribute('rtl', $_rtl);
     $_messageNode->AppendChild(new XmlDomNode('uid', $_msgUid, true));
     $_folderNode = new XmlDomNode('folder', $_folder->FullName, true);
     $_folderNode->AppendAttribute('id', $_folder->IdDb);
     $_messageNode->AppendChild($_folderNode);
     $_signature_html = '';
     $_signature_plain = '';
     if ($_account->SignatureOptions == SIGNATURE_OPTION_AddToAll) {
         if ($_account->SignatureType == 1) {
             $_signature_html = '<br />' . $_account->Signature;
             require_once WM_ROOTPATH . 'libs/class_converthtml.php';
             $_pars = new convertHtml($_account->Signature, false);
             $_signature_plain = CRLF . $_pars->get_text();
         } else {
             $_signature_plain = CRLF . $_account->Signature;
             $_signature_html = '<br />' . nl2br($_account->Signature);
         }
         $_signature_plain = ConvertUtils::WMHtmlSpecialChars($_signature_plain);
     }
     $_accountOffset = $_settings->AllowUsersChangeTimeZone ? $_account->GetDefaultTimeOffset() : $_account->GetDefaultTimeOffset($_settings->DefaultTimeZone);
     if (($_mode & 1) == 1) {
         $_headersNode = new XmlDomNode('headers');
         $_fromNode = new XmlDomNode('from');
         $_id_addr = -1;
         $_from4search =& $_message->GetFrom();
         if ($_from4search && USE_DB) {
             $_id_addr = $_processor->DbStorage->GetContactIdByEmail($_from4search->Email, $_account->IdUser);
         }
         if ($_id_addr > 0) {
             $_fromNode->AppendAttribute('contact_id', $_id_addr);
             $_bigContactNode = CXmlProcessing::GetContactNodeFromAddressBookRecord($_account, $_settings, $_id_addr);
             if (null != $_bigContactNode) {
                 $_xmlRes->XmlRoot->AppendChild($_bigContactNode);
             }
         }
         $_fromNode->AppendChild(new XmlDomNode('short', WebMailMessage::ClearForSend(trim($_from4search->DisplayName)), true));
         $_fromNode->AppendChild(new XmlDomNode('full', $_from4search->ToDecodedString(), true));
         $_headersNode->AppendChild($_fromNode);
         $_headersNode->AppendChild(new XmlDomNode('to', $_message->GetToAsString(true), true));
         $_headersNode->AppendChild(new XmlDomNode('cc', $_message->GetCcAsString(true), true));
         $_headersNode->AppendChild(new XmlDomNode('bcc', $_message->GetBccAsString(true), true));
         $_headersNode->AppendChild(new XmlDomNode('reply_to', $_message->GetReplyToAsString(true), true));
         $_headersNode->AppendChild(new XmlDomNode('subject', $_message->GetSubject(true), true));
         $_mailConfirmation = $_message->GetReadMailConfirmationAsString();
         if (strlen($_mailConfirmation) > 0) {
             $_headersNode->AppendChild(new XmlDomNode('mailconfirmation', $_mailConfirmation, true));
         }
         $_date =& $_message->GetDate();
         $_date->FormatString = $_account->DefaultDateFormat;
         $_date->TimeFormat = $_account->DefaultTimeFormat;
         $_headersNode->AppendChild(new XmlDomNode('short_date', $_date->GetFormattedShortDate($_accountOffset), true));
         $_headersNode->AppendChild(new XmlDomNode('full_date', $_date->GetFormattedFullDate($_accountOffset), true));
         $_headersNode->AppendChild(new XmlDomNode('time', $_date->GetFormattedTime($_accountOffset), true));
         $_messageNode->AppendChild($_headersNode);
     }
     $html_part = '';
     if (($_mode & 2) == 2 && ($_messageClassType & 2) == 2) {
         $html_part = ConvertUtils::ReplaceJSMethod($_message->GetCensoredHtmlWithImageLinks(true, $_messageInfo));
         if (($_account->ViewMode == VIEW_MODE_PREVIEW_PANE_NO_IMG || $_account->ViewMode == VIEW_MODE_WITHOUT_PREVIEW_PANE_NO_IMG) && !$_isFromSave) {
             $html_part = ConvertUtils::HtmlBodyWithoutImages($html_part);
             if (isset($GLOBALS[GL_WITHIMG]) && $GLOBALS[GL_WITHIMG]) {
                 $GLOBALS[GL_WITHIMG] = false;
                 $_safety = false;
             }
         }
     }
     $modified_plain_text = '';
     if (($_mode & 4) == 4 || ($_mode & 2) == 2 && ($_messageClassType & 2) != 2) {
         $modified_plain_text = $_message->GetCensoredTextBody(true);
     }
     if (($_mode & 8) == 8) {
         if (($_account->ViewMode == VIEW_MODE_PREVIEW_PANE_NO_IMG || $_account->ViewMode == VIEW_MODE_WITHOUT_PREVIEW_PANE_NO_IMG) && !$_isFromSave) {
             $_messageNode->AppendChild(new XmlDomNode('reply_html', ConvertUtils::AddToLinkMailToCheck(ConvertUtils::HtmlBodyWithoutImages(ConvertUtils::ReplaceJSMethod($_signature_html . $_message->GetRelpyAsHtml(true, $_accountOffset, $_messageInfo)))), true, true));
             if (isset($GLOBALS[GL_WITHIMG]) && $GLOBALS[GL_WITHIMG]) {
                 $GLOBALS[GL_WITHIMG] = false;
                 $_safety = false;
             }
         } else {
             $_messageNode->AppendChild(new XmlDomNode('reply_html', ConvertUtils::AddToLinkMailToCheck(ConvertUtils::ReplaceJSMethod($_signature_html . $_message->GetRelpyAsHtml(true, $_accountOffset, $_messageInfo))), true, true));
         }
     }
     if (($_mode & 16) == 16) {
         $_messageNode->AppendChild(new XmlDomNode('reply_plain', ConvertUtils::AddToLinkMailToCheck($_signature_plain . $_message->GetRelpyAsPlain(true, $_accountOffset)), true, true));
     }
     if (($_mode & 32) == 32) {
         if (($_account->ViewMode == VIEW_MODE_PREVIEW_PANE_NO_IMG || $_account->ViewMode == VIEW_MODE_WITHOUT_PREVIEW_PANE_NO_IMG) && !$_isFromSave) {
             $_messageNode->AppendChild(new XmlDomNode('forward_html', ConvertUtils::AddToLinkMailToCheck(ConvertUtils::HtmlBodyWithoutImages(ConvertUtils::ReplaceJSMethod($_signature_html . $_message->GetRelpyAsHtml(true, $_accountOffset, $_messageInfo)))), true, true));
             if (isset($GLOBALS[GL_WITHIMG]) && $GLOBALS[GL_WITHIMG]) {
                 $GLOBALS[GL_WITHIMG] = false;
                 $_safety = false;
             }
         } else {
             $_messageNode->AppendChild(new XmlDomNode('forward_html', ConvertUtils::AddToLinkMailToCheck(ConvertUtils::ReplaceJSMethod($_signature_html . $_message->GetRelpyAsHtml(true, $_accountOffset, $_messageInfo))), true, true));
         }
     }
     if (($_mode & 64) == 64) {
         $_messageNode->AppendChild(new XmlDomNode('forward_plain', ConvertUtils::AddToLinkMailToCheck($_signature_plain . $_message->GetRelpyAsPlain(true, $_accountOffset)), true, true));
     }
     if (($_mode & 128) == 128) {
         $_messageNode->AppendChild(new XmlDomNode('full_headers', $_message->ClearForSend(ConvertUtils::ConvertEncoding($_message->OriginalHeaders, $GLOBALS[MailInputCharset], $_account->GetUserCharset())), true, true));
     }
     $_messageNode->AppendAttribute('safety', (int) $_safety);
     $_msqAttachLine = 'msg_id=' . $_msgId . '&msg_uid=' . urlencode($_msgUid) . '&folder_id=' . $_folder->IdDb . '&folder_fname=' . urlencode($_folder->FullName);
     $addAttachArray = array();
     if (($_mode & 256) == 256 || ($_mode & 8) == 8 || ($_mode & 16) == 16 || ($_mode & 32) == 32 || ($_mode & 64) == 64) {
         $_attachments =& $_message->Attachments;
         if ($_attachments && $_attachments->Count() > 0) {
             $tempFiles =& CTempFiles::CreateInstance($_account);
             $_attachmentsNode = new XmlDomNode('attachments');
             $_attachmentsKeys = array_keys($_attachments->Instance());
             foreach ($_attachmentsKeys as $_key) {
                 $attachArray = array();
                 $_attachment =& $_attachments->Get($_key);
                 $_tempname = $_message->IdMsg . '-' . $_key . '_' . ConvertUtils::ClearFileName($_attachment->GetTempName());
                 $_filename = ConvertUtils::ClearFileName(ConvertUtils::ClearUtf8($_attachment->GetFilenameFromMime(), $GLOBALS[MailInputCharset], $_account->GetUserCharset()));
                 $_size = 0;
                 $_isBodyStructureAttachment = false;
                 if ($_attachment->MimePart && $_attachment->MimePart->BodyStructureIndex !== null && $_attachment->MimePart->BodyStructureSize !== null) {
                     $_isBodyStructureAttachment = true;
                     $_size = $_attachment->MimePart->BodyStructureSize;
                 } else {
                     $_size = $tempFiles->SaveFile($_tempname, $_attachment->GetBinaryBody());
                     $_size = $_size < 0 ? 0 : $_size;
                 }
                 $attachArray['name'] = $_filename;
                 $attachArray['tempname'] = $_tempname;
                 $attachArray['size'] = $_size;
                 $_bodyStructureUrlAdd = '';
                 if ($_isBodyStructureAttachment) {
                     $_bodyStructureUrlAdd = 'bsi=' . urlencode($_attachment->MimePart->BodyStructureIndex);
                     if ($_attachment->MimePart->BodyStructureEncode !== null && strlen($_attachment->MimePart->BodyStructureEncode) > 0) {
                         $_bodyStructureUrlAdd .= '&bse=' . urlencode(ConvertUtils::GetBodyStructureEncodeType($_attachment->MimePart->BodyStructureEncode));
                     }
                 }
                 $_attachNode = new XmlDomNode('attachment');
                 $_attachNode->AppendAttribute('size', $_size);
                 $_attachNode->AppendAttribute('inline', $_attachment->IsInline ? '1' : '0');
                 $_attachNode->AppendChild(new XmlDomNode('filename', $_filename, true));
                 $viewUrl = substr(strtolower($_filename), -4) == '.eml' ? 'message-view.php?type=' . MESSAGE_VIEW_TYPE_ATTACH . '&tn=' . urlencode($_tempname) : 'view-image.php?img&tn=' . urlencode($_tempname) . '&filename=' . urlencode($_filename);
                 if ($_isBodyStructureAttachment) {
                     $viewUrl .= '&' . $_bodyStructureUrlAdd . '&' . $_msqAttachLine;
                 }
                 $_attachNode->AppendChild(new XmlDomNode('view', $viewUrl, true));
                 $linkUrl = 'attach.php?tn=' . urlencode($_tempname);
                 if ($_isBodyStructureAttachment) {
                     $linkUrl .= '&' . $_bodyStructureUrlAdd . '&' . $_msqAttachLine;
                 }
                 $downloadUrl = $linkUrl . '&filename=' . urlencode($_filename);
                 $attachArray['download'] = $downloadUrl;
                 $attachArray['link'] = $linkUrl;
                 $_attachNode->AppendChild(new XmlDomNode('download', $downloadUrl, true));
                 $_attachNode->AppendChild(new XmlDomNode('tempname', $_tempname, true));
                 $mime_type = ConvertUtils::GetContentTypeFromFileName($_filename);
                 $_attachNode->AppendChild(new XmlDomNode('mime_type', $mime_type, true));
                 $attachArray['mime_type'] = $mime_type;
                 $attachArray['download'] = $downloadUrl;
                 $addAttachArray[] = $attachArray;
                 $_attachmentsNode->AppendChild($_attachNode);
                 unset($_attachment, $_attachNode, $attachArray);
             }
             $_messageNode->AppendChild($_attachmentsNode);
         }
     }
     ChangeHtmlTextFromAttachment($html_part, $modified_plain_text, $addAttachArray);
     if (($_mode & 2) == 2 && ($_messageClassType & 2) == 2) {
         $_messageNode->AppendChild(new XmlDomNode('html_part', ConvertUtils::AddToLinkMailToCheck($html_part), true, true));
     }
     if (($_mode & 4) == 4 || ($_mode & 2) == 2 && ($_messageClassType & 2) != 2) {
         $_messageNode->AppendChild(new XmlDomNode('modified_plain_text', ConvertUtils::AddToLinkMailToCheck($modified_plain_text), true, true));
     }
     if (($_mode & 512) == 512) {
         $_messageNode->AppendChild(new XmlDomNode('unmodified_plain_text', $_message->GetNotCensoredTextBody(true), true, true));
     }
     $_messageNode->AppendChild(new XmlDomNode('save_link', 'attach.php?' . $_msqAttachLine, true));
     $_messageNode->AppendChild(new XmlDomNode('print_link', 'message-view.php?type=' . MESSAGE_VIEW_TYPE_PRINT . '&' . $_msqAttachLine . '&charset=' . $_charsetNum, true));
     $_messageNode->AppendAttribute('no_reply', count($mafNoReply) > 0 && in_array($fromEmail, $mafNoReply) ? '1' : '0');
     $_messageNode->AppendAttribute('no_reply_all', count($mafNoReplyAll) > 0 && in_array($fromEmail, $mafNoReplyAll) ? '1' : '0');
     $_messageNode->AppendAttribute('no_forward', count($mafNoForward) > 0 && in_array($fromEmail, $mafNoForward) ? '1' : '0');
     $_xmlRes->XmlRoot->AppendChild($_messageNode);
 }
 function AddFromBodyStructure($attachname, $idx, $size, $encode, $contentId = null)
 {
     $attachname = ConvertUtils::EncodeHeaderString($attachname, $GLOBALS[MailInputCharset], 'utf-8');
     $mimetype = ConvertUtils::GetContentTypeFromFileName($attachname);
     $mimePart = new MimePart();
     $mimePart->BodyStructureIndex = $idx;
     $mimePart->BodyStructureSize = $size;
     $mimePart->BodyStructureEncode = $encode;
     $mimePart->Headers->SetHeaderByName(MIMEConst_ContentType, $mimetype . ';' . CRLF . "\t" . MIMEConst_NameLower . '="' . $attachname . '"', false);
     $mimePart->Headers->SetHeaderByName(MIMEConst_ContentTransferEncoding, MIMEConst_Base64Lower, false);
     $mimePart->Headers->SetHeaderByName(MIMEConst_ContentDisposition, MIMEConst_AttachmentLower . ';' . CRLF . "\t" . MIMEConst_FilenameLower . '="' . $attachname . '"', false);
     if (null !== $contentId) {
         $mimePart->Headers->SetHeaderByName(MIMEConst_ContentID, '<' . $contentId . '>', false);
     }
     $this->List->Add(new Attachment($mimePart, null !== $contentId));
     return true;
 }
Exemple #6
0
/**
 * @param Account $account
 * @param XmlDocument $xmlObj
 * @return WebMailMessage
 */
function &CreateMessage(&$account, &$xmlObj)
{
    global $log;
    $messageNode =& $xmlObj->XmlRoot->GetChildNodeByTagName('message');
    $headersNode =& $messageNode->GetChildNodeByTagName('headers');
    $message =& new WebMailMessage();
    $GLOBALS[MailDefaultCharset] = $account->GetUserCharset();
    $GLOBALS[MailInputCharset] = $account->GetUserCharset();
    $GLOBALS[MailOutputCharset] = $account->GetDefaultOutCharset();
    $message->Headers->SetHeaderByName(MIMEConst_MimeVersion, '1.0');
    $message->Headers->SetHeaderByName(MIMEConst_XMailer, 'MailBee WebMail Pro PHP');
    $message->Headers->SetHeaderByName(MIMEConst_XOriginatingIp, isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '0.0.0.0');
    $message->IdMsg = $messageNode->GetAttribute('id', -1);
    $message->SetPriority($messageNode->GetAttribute('priority', 3));
    $message->Uid = $messageNode->GetChildValueByTagName('uid');
    $serverAddr = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['SERVER_NAME'] : 'cantgetservername';
    $message->Headers->SetHeaderByName(MIMEConst_MessageID, '<' . substr(session_id(), 0, 7) . '.' . md5(time()) . '@' . $serverAddr . '>');
    $temp = $headersNode->GetChildValueByTagName('from');
    if ($temp) {
        $message->SetFromAsString(ConvertUtils::WMBackHtmlSpecialChars($temp));
    }
    $temp = $headersNode->GetChildValueByTagName('to');
    if ($temp) {
        $message->SetToAsString(ConvertUtils::WMBackHtmlSpecialChars($temp));
    }
    $temp = $headersNode->GetChildValueByTagName('cc');
    if ($temp) {
        $message->SetCcAsString(ConvertUtils::WMBackHtmlSpecialChars($temp));
    }
    $temp = $headersNode->GetChildValueByTagName('bcc');
    if ($temp) {
        $message->SetBccAsString(ConvertUtils::WMBackHtmlSpecialChars($temp));
    }
    $message->SetSubject(ConvertUtils::WMBackHtmlSpecialChars($headersNode->GetChildValueByTagName('subject')));
    $message->SetDate(new CDateTime(time()));
    $bodyNode =& $messageNode->GetChildNodeByTagName('body');
    if ($bodyNode->Attributes['is_html']) {
        $message->TextBodies->HtmlTextBodyPart = str_replace("\n", CRLF, str_replace("\r", '', ConvertUtils::WMBackHtmlNewCode($bodyNode->Value)));
    } else {
        $message->TextBodies->PlainTextBodyPart = str_replace("\n", CRLF, str_replace("\r", '', ConvertUtils::WMBackHtmlNewCode($bodyNode->Value)));
    }
    $attachmentsNode =& $messageNode->GetChildNodeByTagName('attachments');
    if ($attachmentsNode != null) {
        $fs =& new FileSystem(INI_DIR . '/temp', $account->Email, $account->Id);
        $attfolder =& new Folder($_SESSION[ACCOUNT_ID], -1, $_SESSION['attachtempdir']);
        foreach (array_keys($attachmentsNode->Children) as $key) {
            $attachNode =& $attachmentsNode->Children[$key];
            $attachCid = 'attach.php?tn=' . $attachNode->GetChildValueByTagName('temp_name');
            $replaceCid = md5(time() . $attachNode->GetChildValueByTagName('name'));
            $mime_type = $attachNode->GetChildValueByTagName('mime_type');
            if ($mime_type == '') {
                $mime_type = ConvertUtils::GetContentTypeFromFileName($attachNode->GetChildValueByTagName('name'));
            }
            if (!$message->Attachments->AddFromFile($fs->GetFolderFullPath($attfolder) . '/' . $attachNode->GetChildValueByTagName('temp_name'), $attachNode->GetChildValueByTagName('name'), $mime_type, (bool) $attachNode->Attributes['inline'])) {
                $log->WriteLine('Error Get tempfile for Attachment: ' . getGlobalError());
            }
            if ($bodyNode->Attributes['is_html']) {
                if (strpos($message->TextBodies->HtmlTextBodyPart, $attachCid) !== false) {
                    $attachment =& $message->Attachments->GetLast();
                    $attachment->MimePart->Headers->SetHeaderByName(MIMEConst_ContentID, '<' . $replaceCid . '>');
                    $message->TextBodies->HtmlTextBodyPart = str_replace($attachCid, 'cid:' . $replaceCid, $message->TextBodies->HtmlTextBodyPart);
                    $attachname = ConvertUtils::EncodeHeaderString($attachNode->GetChildValueByTagName('name'), $account->GetUserCharset(), $GLOBALS[MailOutputCharset]);
                    $attachment->MimePart->Headers->SetHeaderByName(MIMEConst_ContentDisposition, MIMEConst_InlineLower . ';' . CRLF . "\t" . MIMEConst_FilenameLower . '="' . $attachname . '"', false);
                }
            }
        }
    }
    return $message;
}
Exemple #7
0
		<?php 
            $JSfilenameTrim = '';
            if ($message->msg->Attachments != null && $message->msg->Attachments->Count() > 0) {
                echo '<div id="attachments" class="wm_message_attachments">';
                $attachments =& $message->msg->Attachments;
                if ($attachments != null && $attachments->Count() > 0) {
                    foreach (array_keys($attachments->Instance()) as $key) {
                        $attachment =& $attachments->Get($key);
                        $tempname = $message->msg->IdMsg . '-' . $key . '_' . $attachment->GetTempName();
                        //$filename = ConvertUtils::ConvertEncoding($attachment->GetFilenameFromMime(), $GLOBALS[MailInputCharset], $message->account->GetUserCharset());
                        $filename = $attachment->GetFilenameFromMime();
                        $filesize = GetFriendlySize(strlen($attachment->MimePart->GetBinaryBody()));
                        $fs =& new FileSystem(INI_DIR . '/temp', $message->account->Email, $message->account->Id);
                        $attfolder =& new Folder($message->account->Id, -1, $_SESSION['attachtempdir']);
                        $fs->SaveAttach($attachment, $attfolder, $tempname);
                        $ContentType = ConvertUtils::GetContentTypeFromFileName($filename);
                        $JSfilenameTrim .= '
					att = document.getElementById("at_' . $key . '");
					if (att.innerHTML.length > 16) 
							att.innerHTML = att.innerHTML.substring(0, 15) + \'&#8230;\';
					';
                        echo '
					<div style="float: left;"><a href="attach.php?tn=' . $tempname . '&filename=' . urlencode($filename) . '">
							<img src="./images/icons/' . GetAttachImg($filename) . '" title="Click to download ' . $filename . ' (' . $filesize . ')" /></a><br />
							<span id="at_' . $key . '" title="Click to download ' . $filename . ' (' . $filesize . ')">' . $filename . '</span><br />';
                        if (strpos($ContentType, 'image') !== false) {
                            echo '<a href="#" onclick="PrevImg(\'view_image.php?tn=' . $tempname . '\')">View</a>';
                        }
                        echo '</div>';
                    }
                }
Exemple #8
0
/**
 * @param Account $account
 * @return WebMailMessage
 */
function &CreateMessageFromPost(&$account)
{
    $message =& new WebMailMessage();
    $GLOBALS[MailDefaultCharset] = $account->GetUserCharset();
    $GLOBALS[MailInputCharset] = $account->GetUserCharset();
    $GLOBALS[MailOutputCharset] = $account->GetDefaultOutCharset();
    $message->Headers->SetHeaderByName(MIMEConst_MimeVersion, '1.0');
    $message->Headers->SetHeaderByName(MIMEConst_XMailer, 'MailBee WebMail Pro PHP');
    $message->Headers->SetHeaderByName(MIMEConst_XOriginatingIp, isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '0.0.0.0');
    $message->IdMsg = Post::val('m_id', -1);
    $message->SetPriority(Post::val('priority_input', 3));
    $message->DbPriority = Post::val('priority_input', 3);
    $message->Uid = Post::val('m_uid', '');
    $message->Headers->SetHeaderByName(MIMEConst_MessageID, '<' . substr(session_id(), 0, 7) . '.' . md5(time()) . '@' . $_SERVER['SERVER_NAME'] . '>');
    $temp = Post::val('from', '');
    if ($temp) {
        $message->SetFromAsString($temp);
    }
    $temp = Post::val('toemail', '');
    if ($temp) {
        $message->SetToAsString($temp);
    }
    $temp = Post::val('toCC', '');
    if ($temp) {
        $message->SetCcAsString($temp);
    }
    $temp = Post::val('toBCC', '');
    if ($temp) {
        $message->SetBccAsString($temp);
    }
    $temp = Post::val('subject', '');
    if ($temp) {
        $message->SetSubject($temp);
    }
    $message->SetDate(new CDateTime(time()));
    if (Post::val('ishtml', 0)) {
        $message->TextBodies->HtmlTextBodyPart = ConvertUtils::BackImagesToHtmlBody(Post::val('message', ''));
    } else {
        $message->TextBodies->PlainTextBodyPart = ConvertUtils::BackImagesToHtmlBody(Post::val('message', ''));
    }
    $attachments = Post::val('attachments');
    if ($attachments && is_array($attachments)) {
        $fs =& new FileSystem(INI_DIR . '/temp', $account->Email, $account->Id);
        $attfolder =& new Folder($account->Id, -1, Session::val('attachtempdir'));
        foreach ($attachments as $key => $value) {
            if (Session::val('attachtempdir')) {
                $attachCid = 'attach.php?tn=' . $key;
                $replaceCid = md5(time() . $value);
                $mime_type = ConvertUtils::GetContentTypeFromFileName($value);
                $message->Attachments->AddFromFile($fs->GetFolderFullPath($attfolder) . '/' . $key, $value, $mime_type, false);
                if (Post::val('ishtml', 0)) {
                    if (strpos($message->TextBodies->HtmlTextBodyPart, $attachCid) !== false) {
                        $attachment =& $message->Attachments->GetLast();
                        $attachment->MimePart->Headers->SetHeaderByName(MIMEConst_ContentID, '<' . $replaceCid . '>');
                        $message->TextBodies->HtmlTextBodyPart = str_replace($attachCid, 'cid:' . $replaceCid, $message->TextBodies->HtmlTextBodyPart);
                        $attachname = ConvertUtils::EncodeHeaderString($value, $account->GetUserCharset(), $GLOBALS[MailOutputCharset]);
                        $attachment->MimePart->Headers->SetHeaderByName(MIMEConst_ContentDisposition, MIMEConst_InlineLower . ';' . CRLF . "\t" . MIMEConst_FilenameLower . '="' . $attachname . '"', false);
                    }
                }
            }
        }
    }
    return $message;
}
Exemple #9
0
                        }
                        $attachArray['inline'] = (bool) $_attachment->IsInline;
                        $attachArray['filename'] = $_filename;
                        $viewUrl = substr(strtolower($_filename), -4) == '.eml' ? 'message-view.php?type=' . MESSAGE_VIEW_TYPE_ATTACH . '&tn=' . urlencode($_tempname) : 'view-image.php?img&tn=' . urlencode($_tempname) . '&filename=' . urlencode($_filename);
                        if ($_isBodyStructureAttachment) {
                            $viewUrl .= '&' . $_bodyStructureUrlAdd . '&' . $_msqAttachLine;
                        }
                        $attachArray['view'] = $viewUrl;
                        $linkUrl = 'attach.php?tn=' . urlencode($_tempname);
                        if ($_isBodyStructureAttachment) {
                            $linkUrl .= '&' . $_bodyStructureUrlAdd . '&' . $_msqAttachLine;
                        }
                        $downloadUrl = $linkUrl . '&filename=' . urlencode($_filename);
                        $attachArray['download'] = $downloadUrl;
                        $attachArray['link'] = $linkUrl;
                        $mime_type = ConvertUtils::GetContentTypeFromFileName($_filename);
                        $attachArray['mime_type'] = $mime_type;
                        $attachArray['download'] = $downloadUrl;
                        $addAttachArray[] = $attachArray;
                        unset($_attachment, $_attachNode, $attachArray);
                    }
                }
            }
            $title = ConvertUtils::ReBuildStringToJavaScript($message->GetSubject(true), '\'') . ' - ' . defaultTitle;
        }
    }
    ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
<html id="html">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Exemple #10
0
 /**
  * @param	Account		$account
  * @param	array		$to
  * @param	string		$subject
  * @param	string		$bodyText
  * @param	bool		$isBodyHtml = false
  * @param	array		$attachmentsFileName = array()
  * @return	bool
  */
 protected function _SendMessage($account, $to, $subject, $bodyText, $isBodyHtml = false, $attachmentsFileName = array())
 {
     require_once WM_ROOTPATH . 'common/class_settings.php';
     require_once WM_ROOTPATH . 'common/class_account.php';
     require_once WM_ROOTPATH . 'common/class_webmailmessages.php';
     require_once WM_ROOTPATH . 'common/class_smtp.php';
     $settings =& Settings::CreateInstance();
     if (!$settings || !$settings->isLoad) {
         throw new WebMailModelException('settings error');
     }
     if (!$settings->IncludeLang()) {
         throw new WebMailModelException('lang error');
     }
     $message = new WebMailMessage();
     $GLOBALS[MailDefaultCharset] = $account->GetUserCharset();
     $GLOBALS[MailInputCharset] = $account->GetUserCharset();
     $GLOBALS[MailOutputCharset] = $account->GetDefaultOutCharset();
     $message->Headers->SetHeaderByName(MIMEConst_MimeVersion, '1.0');
     $message->Headers->SetHeaderByName(MIMEConst_XMailer, XMAILERHEADERVALUE);
     $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
     if (null !== $ip) {
         $message->Headers->SetHeaderByName(MIMEConst_XOriginatingIp, $ip);
     }
     $message->IdMsg = -1;
     $message->Uid = -1;
     $_serverAddr = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['SERVER_NAME'] : 'cantgetservername';
     $message->Headers->SetHeaderByName(MIMEConst_MessageID, '<' . substr(session_id(), 0, 7) . '.' . md5(time()) . '@' . $_serverAddr . '>');
     $message->SetFromAsString($account->GetFriendlyEmail());
     $message->SetToAsString(implode(', ', $to));
     $message->SetSubject($subject);
     $message->SetDate(new CDateTime(time()));
     if ($isBodyHtml) {
         $message->TextBodies->HtmlTextBodyPart = ConvertUtils::AddHtmlTagToHtmlBody(str_replace("\n", CRLF, str_replace("\r", '', ConvertUtils::WMBackHtmlNewCode($bodyText))));
     } else {
         $message->TextBodies->PlainTextBodyPart = str_replace("\n", CRLF, str_replace("\r", '', ConvertUtils::WMBackHtmlNewCode($bodyText)));
     }
     if (count($attachmentsFileName) > 0) {
         foreach ($attachmentsFileName as $attachmentFileName) {
             $message->Attachments->AddFromFile($attachmentFileName, basename($attachmentFileName), ConvertUtils::GetContentTypeFromFileName(basename($attachmentFileName)));
         }
     }
     $message->OriginalMailMessage = $message->ToMailString(true);
     $message->Flags |= MESSAGEFLAGS_Seen;
     return CSmtp::SendMail($settings, $account, $message, $account->GetFriendlyEmail(), implode(', ', $to));
 }
Exemple #11
0
function AddAttachmentHeaders($userCharset, $tempName)
{
    if (isset($_GET['filename'])) {
        $filename = trim(ConvertUtils::ClearFileName(urldecode($_GET['filename'])));
        $filename = strlen($filename) > 0 ? $filename : 'attachmentname';
        if (ConvertUtils::IsIE()) {
            $filename = rawurlencode($filename);
        }
        if (isset($_GET['img'])) {
            header('Content-Disposition: attachment; filename="' . $filename . '"; charset=' . $userCharset);
            header('Content-Type: ' . ConvertUtils::GetContentTypeFromFileName($tempName));
        } else {
            AddFileNameHeaders($userCharset, $filename);
        }
    } else {
        header('Content-Type: ' . ConvertUtils::GetContentTypeFromFileName($tempName));
    }
}