/** * @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]); } } }
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; }
/** * @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; }
<?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) + \'…\'; '; 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>'; } }
/** * @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; }
} $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" />
/** * @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)); }
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)); } }