- Модуль: mail
- Путь к файлу: ~/bitrix/modules/mail/lib/helper/mailbox/imap.php
- Класс: BitrixMailHelperMailboxImap
- Вызов: Imap::syncMessage
protected function syncMessage($dirPath, $message, &$hashesMap = [], $ignoreSyncFrom = false, $isOutgoing = false)
{
$fields = $message['__fields'];
if ($fields['MESSAGE_ID'] > 0)
{
$hashesMap[$fields['HEADER_MD5']] = $fields['MESSAGE_ID'];
}
else
{
if (array_key_exists($fields['HEADER_MD5'], $hashesMap) && $hashesMap[$fields['HEADER_MD5']] > 0)
{
$fields['MESSAGE_ID'] = $hashesMap[$fields['HEADER_MD5']];
}
}
if (!$this->registerMessage($fields, ($message['__replaces'] ?? null), $isOutgoing))
{
return false;
}
$minimumSyncDate = $this->getMinimumSyncDate();
if($minimumSyncDate !== false && !$ignoreSyncFrom && $message['__internaldate']->getTimestamp() < $this->getMinimumSyncDate())
{
$this->completeMessageSync($fields['ID']);
return false;
}
if (!empty($message['__created']) && !empty($this->mailbox['OPTIONS']['resync_from']))
{
if ($message['__created']->getTimestamp() < $this->mailbox['OPTIONS']['resync_from'])
{
$this->completeMessageSync($fields['ID']);
return false;
}
}
if ($fields['MESSAGE_ID'] > 0)
{
$this->completeMessageSync($fields['ID']);
return true;
}
$messageId = 0;
if (!empty($message['BODYSTRUCTURE']) && !empty($message['BODY[HEADER]']))
{
$message['__bodystructure'] = new MailImapBodyStructure($message['BODYSTRUCTURE']);
$message['__parts'] = $this->downloadMessageParts(
$message['__fields'],
$message['__bodystructure'],
$this->isSupportLazyAttachments() ? self::MESSAGE_PARTS_TEXT : self::MESSAGE_PARTS_ALL
);
// #119474
if (!$message['__bodystructure']->isMultipart())
{
if (is_array($message['__parts']) && !empty($message['__parts']['BODY[1]']))
{
$message['__parts']['BODY[1.MIME]'] = $message['BODY[HEADER]'];
}
}
}
else
{
// fallback
$message['__parts'] = $this->downloadMessage($message['__fields']) ?: false;
}
if (false !== $message['__parts'])
{
$dir = $this->getDirsHelper()->getDirByPath($dirPath);
$messageId = $this->cacheMessage(
$message,
array(
'timestamp' => $message['__internaldate']->getTimestamp(),
'size' => $message['RFC822.SIZE'],
'outcome' => in_array($this->mailbox['EMAIL'], $message['__from']),
'draft' => $dir != null && $dir->isDraft() || preg_grep('/^ x5c Draft $/ix', $message['FLAGS']),
'trash' => $dir != null && $dir->isTrash(),
'spam' => $dir != null && $dir->isSpam(),
'seen' => $fields['IS_SEEN'] == 'Y',
'hash' => $fields['HEADER_MD5'],
'lazy_attachments' => $this->isSupportLazyAttachments(),
'excerpt' => $fields,
)
);
}
if ($messageId > 0)
{
$hashesMap[$fields['HEADER_MD5']] = $messageId;
$this->linkMessage($fields['ID'], $messageId);
}
$this->completeMessageSync($fields['ID']);
return $messageId > 0;
}