mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-09-08 06:04:14 +08:00
Support IMAP RFC 3516 BINARY
This commit is contained in:
parent
464e766fcc
commit
33967c2319
2 changed files with 17 additions and 3 deletions
|
@ -164,6 +164,10 @@ trait ResponseParser
|
|||
unset($mResult);
|
||||
continue 2;
|
||||
|
||||
case '~': // literal8
|
||||
if ('{' !== $this->sResponseBuffer[++$iPos]) {
|
||||
break;
|
||||
}
|
||||
case '{':
|
||||
$iLength = \strspn($this->sResponseBuffer, '0123456789', $iPos + 1);
|
||||
if ($iLength && "}\r\n" === \substr($this->sResponseBuffer, $iPos + 1 + $iLength, 3)) {
|
||||
|
@ -383,13 +387,14 @@ trait ResponseParser
|
|||
$sLiteralAtomUpperCasePeek = '';
|
||||
if (0 === \strpos($sLiteralAtomUpperCase, 'BODY')) {
|
||||
$sLiteralAtomUpperCasePeek = \str_replace('BODY', 'BODY.PEEK', $sLiteralAtomUpperCase);
|
||||
} else if (0 === \strpos($sLiteralAtomUpperCase, 'BINARY')) {
|
||||
$sLiteralAtomUpperCasePeek = \str_replace('BINARY', 'BINARY.PEEK', $sLiteralAtomUpperCase);
|
||||
}
|
||||
|
||||
$sFetchKey = $sLiteralAtomUpperCase;
|
||||
if ($sLiteralAtomUpperCasePeek && isset($this->aFetchCallbacks[$sLiteralAtomUpperCasePeek])) {
|
||||
$sFetchKey = $sLiteralAtomUpperCasePeek;
|
||||
}
|
||||
|
||||
if (empty($this->aFetchCallbacks[$sFetchKey]) || !\is_callable($this->aFetchCallbacks[$sFetchKey])) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -208,6 +208,8 @@ class MailClient
|
|||
}
|
||||
|
||||
/**
|
||||
* Streams mime part to $mCallback
|
||||
*
|
||||
* @param mixed $mCallback
|
||||
*
|
||||
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
|
||||
|
@ -226,8 +228,9 @@ class MailClient
|
|||
$sFileName = '';
|
||||
$sContentType = '';
|
||||
$sMailEncoding = '';
|
||||
$sPeek = FetchType::BODY_PEEK;
|
||||
|
||||
$sMimeIndex = trim($sMimeIndex);
|
||||
$sMimeIndex = \trim($sMimeIndex);
|
||||
$aFetchResponse = $this->oImapClient->Fetch(array(
|
||||
\strlen($sMimeIndex)
|
||||
? FetchType::BODY_PEEK.'['.$sMimeIndex.'.MIME]'
|
||||
|
@ -257,6 +260,12 @@ class MailClient
|
|||
$oHeaders->ValueByName(MimeHeader::CONTENT_TRANSFER_ENCODING)
|
||||
);
|
||||
|
||||
// RFC 3516
|
||||
if ($sMailEncoding && $this->oImapClient->IsSupported('BINARY')) {
|
||||
$sMailEncoding = '';
|
||||
$sPeek = FetchType::BINARY_PEEK;
|
||||
}
|
||||
|
||||
$sContentType = $oHeaders->ValueByName(MimeHeader::CONTENT_TYPE);
|
||||
}
|
||||
else
|
||||
|
@ -271,7 +280,7 @@ class MailClient
|
|||
$aFetchResponse = $this->oImapClient->Fetch(array(
|
||||
// Push in the aFetchCallbacks array and then called by \MailSo\Imap\Traits\ResponseParser::partialResponseLiteralCallbackCallable
|
||||
array(
|
||||
FetchType::BODY_PEEK.'['.$sMimeIndex.']',
|
||||
$sPeek.'['.$sMimeIndex.']',
|
||||
function ($sParent, $sLiteralAtomUpperCase, $rImapLiteralStream) use ($mCallback, $sMimeIndex, $sMailEncoding, $sContentType, $sFileName)
|
||||
{
|
||||
if (\strlen($sLiteralAtomUpperCase) && \is_resource($rImapLiteralStream) && 'FETCH' === $sParent)
|
||||
|
|
Loading…
Add table
Reference in a new issue