- Модуль: mail
- Путь к файлу: ~/bitrix/modules/mail/lib/helper/mailbox/imap.php
- Класс: BitrixMailHelperMailboxImap
- Вызов: Imap::cacheMessage
protected function cacheMessage(&$message, $params = array())
{
if (!is_array($message))
{
return parent::cacheMessage($message, $params);
}
if (!is_array($message['__parts']))
{
return parent::cacheMessage($message['__parts'], $params);
}
if (empty($message['__header']))
{
return false;
}
if (empty($message['__bodystructure']) || !($message['__bodystructure'] instanceof MailImapBodyStructure))
{
return false;
}
$params['log_parts'] = $message['__parts'];
$complete = function (&$html, &$text)
{
if ('' !== $html && '' === $text)
{
$text = html_entity_decode(
htmlToTxt($html),
ENT_QUOTES | ENT_HTML401,
$this->mailbox['LANG_CHARSET']
);
}
elseif ('' === $html && '' !== $text)
{
$html = txtToHtml($text, false, 120);
}
};
[$bodyHtml, $bodyText, $attachments] = $message['__bodystructure']->traverse(
function (MailImapBodyStructure $item, &$subparts) use (&$message, &$complete)
{
$parts = &$message['__parts'];
$html = '';
$text = '';
$attachments = array();
if ($item->isMultipart())
{
if ('alternative' === $item->getSubtype())
{
foreach ($subparts as $part)
{
$part = $part[0];
if ('' !== $part[0])
{
$html = $part[0];
}
if ('' !== $part[1])
{
$text = $part[1];
}
if (!empty($part[2]))
{
$attachments = array_merge($attachments, $part[2]);
}
}
$complete($html, $text);
}
else
{
foreach ($subparts as $part)
{
$part = $part[0];
$complete($part[0], $part[1]);
if ('' !== $part[0] || '' !== $part[1])
{
$html .= $part[0] . "rnrn";
$text .= $part[1] . "rnrn";
}
$attachments = array_merge($attachments, $part[2]);
}
}
$html = trim($html);
$text = trim($text);
}
else
{
if (array_key_exists(sprintf('BODY[%s]', $item->getNumber()), $parts))
{
$part = CMailMessage::decodeMessageBody(
CMailMessage::parseHeader(
$parts[sprintf('BODY[%s.MIME]', $item->getNumber())],
$this->mailbox['LANG_CHARSET']
),
$parts[sprintf('BODY[%s]', $item->getNumber())],
$this->mailbox['LANG_CHARSET']
);
}
else
{
$part = [
'CONTENT-TYPE' => $item->getType() . '/' . $item->getSubtype(),
'CONTENT-ID' => $item->getId(),
'BODY' => '',
'FILENAME' => $item->getParams()['name']
];
}
if (!$item->isBodyText())
{
$attachments[] = $part;
}
elseif (!empty($part))
{
if ('html' === $item->getSubtype())
{
$html = $part['BODY'];
}
else
{
$text = $part['BODY'];
}
}
}
return array($html, $text, $attachments);
}
)[0];
$complete($bodyHtml, $bodyText);
return CMailMessage::saveMessage(
$this->mailbox['ID'],
$dummyBody,
$message['__header'],
$bodyHtml,
$bodyText,
$attachments,
$params
);
}