/** * @param Account $_account * @param XmlDocument $_xmlObj * @return WebMailMessage */ function &CreateMessage(&$_account, &$_xmlObj, &$_xmlRes) { $_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, XMAILERHEADERVALUE); $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null; if (null !== $ip) { $_message->Headers->SetHeaderByName(MIMEConst_XOriginatingIp, $ip); } $_fromAcctId = $_messageNode->GetAttribute('from_acct_id', -1); $_message->IdMsg = $_messageNode->GetAttribute('id', -1); $_message->SetPriority($_messageNode->GetAttribute('priority', 3)); $_message->SetSensivity($_messageNode->GetAttribute('sensivity', MIME_SENSIVITY_NOTHING)); $_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 . '>'); if ($_fromAcctId > 0) { $_fromAcct = null; if ($_account->Id == $_fromAcctId) { $_fromAcct = $_account; } else { CXmlProcessing::CheckAccountAccess($_fromAcctId, $_xmlRes); $_fromAcct = CXmlProcessing::AccountCheckAndLoad($_xmlRes, $_fromAcctId, false, false); } if ($_fromAcct) { $email = $_fromAcct->GetFriendlyEmail(); /* custom class */ wm_Custom::StaticUseMethod('ChangeAccountEmailToFake', array(&$email)); $_message->SetFromAsString(ConvertUtils::WMBackHtmlSpecialChars($email)); } } else { $_temp = $_headersNode->GetChildValueByTagName('from'); if ($_temp) { /* custom class */ wm_Custom::StaticUseMethod('ChangeAccountEmailToFake', array(&$_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)); } $_temp = $_headersNode->GetChildValueByTagName('mailconfirmation'); if ($_temp) { /* custom class */ wm_Custom::StaticUseMethod('ChangeAccountEmailToFake', array(&$_temp)); $_message->SetReadMailConfirmationAsString(ConvertUtils::WMBackHtmlSpecialChars($_temp)); } $_message->SetSubject(ConvertUtils::WMBackHtmlSpecialChars($_headersNode->GetChildValueByTagName('subject'))); $_message->SetDate(new CDateTime(time())); $_bodyNode =& $_messageNode->GetChildNodeByTagName('body'); if (isset($_bodyNode->Attributes['is_html']) && $_bodyNode->Attributes['is_html']) { $_message->TextBodies->HtmlTextBodyPart = ConvertUtils::AddHtmlTagToHtmlBody(str_replace("\n", CRLF, str_replace("\r", '', ConvertUtils::BackImagesToHtmlBody(ConvertUtils::WMBackHtmlNewCode($_bodyNode->Value))))); $_message->TextBodies->PlainTextBodyPart = $_message->TextBodies->HtmlToPlain(); } else { $_message->TextBodies->PlainTextBodyPart = str_replace("\n", CRLF, str_replace("\r", '', ConvertUtils::WMBackHtmlNewCode($_bodyNode->Value))); } $_attachmentsNode =& $_messageNode->GetChildNodeByTagName('attachments'); if ($_attachmentsNode != null) { $tempFiles =& CTempFiles::CreateInstance($_account); $_log =& CLog::CreateInstance(); $_attachmentsKeys = array_keys($_attachmentsNode->Children); foreach ($_attachmentsKeys as $_key) { $_attachNode =& $_attachmentsNode->Children[$_key]; $_tempName = $_attachNode->GetChildValueByTagName('temp_name'); $_fileName = $_attachNode->GetChildValueByTagName('name'); $_attachCid = 'attach.php?img&tn=' . $_tempName . '&filename=' . $_fileName; $_replaceCid = md5(time() . $_fileName); $_mime_type = $_attachNode->GetChildValueByTagName('mime_type'); if ($_mime_type === '') { $_mime_type = ConvertUtils::GetContentTypeFromFileName($_fileName); } $_isInline = (bool) $_attachNode->GetAttribute('inline', false); if (!$_message->Attachments->AddFromBinaryBody($tempFiles->LoadFile($_attachNode->GetChildValueByTagName('temp_name')), $_fileName, $_mime_type, $_isInline)) { $_log->WriteLine('Error Add tempfile in message: ' . getGlobalError(), LOG_LEVEL_ERROR); } if (isset($_bodyNode->Attributes['is_html']) && $_bodyNode->Attributes['is_html']) { if (strpos($_message->TextBodies->HtmlTextBodyPart, $_attachCid) !== false) { $_attachment =& $_message->Attachments->GetLast(); if ($_attachment) { $_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); } unset($_attachment); } else { if ($_isInline) { $_message->Attachments->DeleteLast(); } } } unset($_attachNode); } } return $_message; }