mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-09-20 07:35:55 +08:00
Improved comments for IMAP RFC's
This commit is contained in:
parent
c7f80d617e
commit
d42f54ad58
|
@ -32,7 +32,7 @@ abstract class DateTimeHelper
|
|||
|
||||
/**
|
||||
* Parse date string formated as "Thu, 10 Jun 2010 08:58:33 -0700 (PDT)"
|
||||
* RFC2822
|
||||
* RFC 2822
|
||||
*/
|
||||
public static function ParseRFC2822DateString(string $sDateTime) : int
|
||||
{
|
||||
|
|
|
@ -31,8 +31,10 @@ trait Folders
|
|||
*/
|
||||
public function FolderCreate(string $sFolderName) : self
|
||||
{
|
||||
$this->SendRequestGetResponse('CREATE',
|
||||
array($this->EscapeFolderName($sFolderName)));
|
||||
$this->SendRequestGetResponse('CREATE', array(
|
||||
$this->EscapeFolderName($sFolderName)
|
||||
// , ['(USE (\Drafts \Sent))'] RFC 6154
|
||||
));
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
@ -163,13 +165,15 @@ trait Folders
|
|||
* @throws \MailSo\Net\Exceptions\Exception
|
||||
* @throws \MailSo\Imap\Exceptions\Exception
|
||||
*/
|
||||
public function FolderClose() : self
|
||||
public function FolderClose() : int
|
||||
{
|
||||
if ($this->IsSelected()) {
|
||||
$this->SendRequestGetResponse('CLOSE');
|
||||
$this->oCurrentFolderInfo = null;
|
||||
// https://datatracker.ietf.org/doc/html/rfc5162#section-3.4
|
||||
// return HIGHESTMODSEQ ?
|
||||
}
|
||||
return $this;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -204,7 +208,7 @@ trait Folders
|
|||
* @throws \MailSo\Net\Exceptions\Exception
|
||||
* @throws \MailSo\Imap\Exceptions\Exception
|
||||
*/
|
||||
public function FolderExpunge(SequenceSet $oUidRange = null) : self
|
||||
public function FolderExpunge(SequenceSet $oUidRange = null) : void
|
||||
{
|
||||
$sCmd = 'EXPUNGE';
|
||||
$aArguments = array();
|
||||
|
@ -214,8 +218,11 @@ trait Folders
|
|||
$aArguments = array((string) $oUidRange);
|
||||
}
|
||||
|
||||
// https://datatracker.ietf.org/doc/html/rfc5162#section-3.5
|
||||
// Before returning an OK to the client, those messages that are removed
|
||||
// are reported using a VANISHED response or EXPUNGE responses.
|
||||
|
||||
$this->SendRequestGetResponse($sCmd, $aArguments);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -274,10 +281,24 @@ trait Folders
|
|||
}
|
||||
|
||||
$aSelectParams = array();
|
||||
|
||||
/*
|
||||
// RFC 5162
|
||||
if ($this->IsSupported('QRESYNC')) {
|
||||
$this->Enable(['QRESYNC', 'CONDSTORE']);
|
||||
- the last known UIDVALIDITY,
|
||||
- the last known modification sequence,
|
||||
- the optional set of known UIDs,
|
||||
- and an optional parenthesized list of known sequence ranges and their corresponding UIDs.
|
||||
QRESYNC (UIDVALIDITY HIGHESTMODSEQ 41,43:211,214:541)
|
||||
QRESYNC (67890007 20050715194045000 41,43:211,214:541)
|
||||
}
|
||||
|
||||
// RFC 4551
|
||||
if ($this->IsSupported('CONDSTORE')) {
|
||||
$aSelectParams[] = 'CONDSTORE';
|
||||
}
|
||||
|
||||
// RFC 5738
|
||||
if ($this->UTF8) {
|
||||
$aSelectParams[] = 'UTF8';
|
||||
|
|
|
@ -88,6 +88,8 @@ trait Messages
|
|||
* $aParams[] = (CHANGEDSINCE $modsequence)
|
||||
* https://datatracker.ietf.org/doc/html/rfc4551#section-3.3.2
|
||||
* $aParams[1][] = MODSEQ
|
||||
* https://datatracker.ietf.org/doc/html/rfc5162#section-3.2
|
||||
* $bIndexIsUid && $aParams[] = (CHANGEDSINCE $modsequence VANISHED)
|
||||
*/
|
||||
|
||||
$this->SendRequest($bIndexIsUid ? 'UID FETCH' : 'FETCH', $aParams);
|
||||
|
@ -150,6 +152,11 @@ trait Messages
|
|||
return $iUid;
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 3502 MULTIAPPEND
|
||||
public function MessageAppendStreams(string $sFolderName, $rMessageAppendStream, int $iStreamSize, array $aAppendFlags = null, int &$iUid = null, int $iDateTime = 0) : ?int
|
||||
*/
|
||||
|
||||
/**
|
||||
* @throws \MailSo\Base\Exceptions\InvalidArgumentException
|
||||
* @throws \MailSo\Net\Exceptions\Exception
|
||||
|
|
|
@ -28,7 +28,7 @@ enum FolderACL: string {
|
|||
abstract class FolderACL
|
||||
{
|
||||
const
|
||||
/** rfc2086 */
|
||||
/** RFC 2086 */
|
||||
// perform SETACL/DELETEACL/GETACL/LISTRIGHTS
|
||||
ADMINISTER = 'a',
|
||||
// mailbox is visible to LIST/LSUB commands, SUBSCRIBE mailbox
|
||||
|
@ -47,7 +47,7 @@ abstract class FolderACL
|
|||
// CREATE_OLD = 'c',
|
||||
// STORE DELETED flag, perform EXPUNGE
|
||||
// DELETED_OLD = 'd',
|
||||
/** rfc4314 */
|
||||
/** RFC 4314 */
|
||||
// CREATE new sub-mailboxes in any implementation-defined hierarchy, parent mailbox for the new mailbox name in RENAME
|
||||
CREATE = 'k',
|
||||
// DELETE mailbox, old mailbox name in RENAME
|
||||
|
|
|
@ -18,16 +18,16 @@ namespace MailSo\Imap\Enumerations;
|
|||
*/
|
||||
abstract class FolderResponseStatus
|
||||
{
|
||||
// rfc3501
|
||||
// RFC 3501
|
||||
const MESSAGES = 'MESSAGES';
|
||||
// const RECENT = 'RECENT'; // IMAP4rev2 deprecated
|
||||
const UIDNEXT = 'UIDNEXT';
|
||||
const UIDVALIDITY = 'UIDVALIDITY';
|
||||
const UNSEEN = 'UNSEEN';
|
||||
// rfc4551
|
||||
// RFC 4551
|
||||
const HIGHESTMODSEQ = 'HIGHESTMODSEQ';
|
||||
// rfc7889
|
||||
// RFC 7889
|
||||
const APPENDLIMIT = 'APPENDLIMIT';
|
||||
// rfc8474
|
||||
// RFC 8474
|
||||
const MAILBOXID = 'MAILBOXID';
|
||||
}
|
||||
|
|
|
@ -18,16 +18,16 @@ namespace MailSo\Imap\Enumerations;
|
|||
*/
|
||||
abstract class FolderStatus
|
||||
{
|
||||
// rfc3501
|
||||
// RFC 3501
|
||||
const MESSAGES = 'MESSAGES';
|
||||
// const RECENT = 'RECENT'; // IMAP4rev2 deprecated
|
||||
const UIDNEXT = 'UIDNEXT';
|
||||
const UIDVALIDITY = 'UIDVALIDITY';
|
||||
const UNSEEN = 'UNSEEN';
|
||||
// rfc4551
|
||||
// RFC 4551
|
||||
const HIGHESTMODSEQ = 'HIGHESTMODSEQ';
|
||||
// rfc7889
|
||||
// RFC 7889
|
||||
const APPENDLIMIT = 'APPENDLIMIT';
|
||||
// rfc8474
|
||||
// RFC 8474
|
||||
const MAILBOXID = 'MAILBOXID';
|
||||
}
|
||||
|
|
|
@ -234,13 +234,13 @@ class ImapClient extends \MailSo\Net\NetClient
|
|||
/*
|
||||
// TODO: RFC 9051
|
||||
if ($this->IsSupported('IMAP4rev2')) {
|
||||
$this->SendRequestGetResponse('ENABLE', array('IMAP4rev1'));
|
||||
$this->Enable('IMAP4rev1');
|
||||
}
|
||||
*/
|
||||
// RFC 6855 || RFC 5738
|
||||
$this->UTF8 = $this->IsSupported('UTF8=ONLY') || $this->IsSupported('UTF8=ACCEPT');
|
||||
if ($this->UTF8) {
|
||||
$this->SendRequestGetResponse('ENABLE', array('UTF8=ACCEPT'));
|
||||
$this->Enable('ENABLE', 'UTF8=ACCEPT');
|
||||
}
|
||||
}
|
||||
catch (Exceptions\NegativeResponseException $oException)
|
||||
|
@ -310,6 +310,19 @@ class ImapClient extends \MailSo\Net\NetClient
|
|||
return $sExtentionName && \in_array(\strtoupper($sExtentionName), $this->Capability() ?: []);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 5161
|
||||
*/
|
||||
public function Enable(/*string|array*/ $mCapabilityNames) : void
|
||||
{
|
||||
if (\is_string($mCapabilityNames)) {
|
||||
$mCapabilityNames = [$mCapabilityNames];
|
||||
}
|
||||
if (\is_array($mCapabilityNames)) {
|
||||
$this->SendRequestGetResponse('ENABLE', $mCapabilityNames);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \MailSo\Net\Exceptions\Exception
|
||||
* @throws \MailSo\Imap\Exceptions\Exception
|
||||
|
@ -637,6 +650,26 @@ class ImapClient extends \MailSo\Net\NetClient
|
|||
return 'UNKNOWN';
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4978
|
||||
* It is RECOMMENDED that the client uses TLS compression.
|
||||
*//*
|
||||
public function Compress() : bool
|
||||
{
|
||||
try {
|
||||
if ($this->IsSupported('COMPRESS=DEFLATE')) {
|
||||
$this->SendRequestGetResponse('COMPRESS', ['DEFLATE']);
|
||||
\stream_filter_append($this->ConnectionResource(), 'zlib.inflate');
|
||||
\stream_filter_append($this->ConnectionResource(), 'zlib.deflate', STREAM_FILTER_WRITE, array(
|
||||
'level' => 6, 'window' => 15, 'memory' => 9
|
||||
));
|
||||
return true;
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
return false;
|
||||
}*/
|
||||
|
||||
public function EscapeFolderName(string $sFolderName) : string
|
||||
{
|
||||
return $this->EscapeString($this->UTF8 ? $sFolderName : \MailSo\Base\Utils::Utf8ToUtf7Modified($sFolderName));
|
||||
|
|
|
@ -30,7 +30,7 @@ class SORT extends Request
|
|||
$bUid = true,
|
||||
$aSortTypes = [],
|
||||
$sLimit = '',
|
||||
// rfc5267
|
||||
// RFC 5267
|
||||
$aReturn = [
|
||||
/**
|
||||
ALL
|
||||
|
|
|
@ -63,7 +63,7 @@ trait Status
|
|||
$UNSEEN,
|
||||
|
||||
/**
|
||||
* RFC4551
|
||||
* RFC 4551
|
||||
* The highest mod-sequence value of all messages in the mailbox.
|
||||
* This response also occurs as a result of a SELECT or EXAMINE command.
|
||||
* @var int 1*DIGIT Positive unsigned 64-bit integer
|
||||
|
@ -71,14 +71,14 @@ trait Status
|
|||
$HIGHESTMODSEQ,
|
||||
|
||||
/**
|
||||
* RFC7889
|
||||
* RFC 7889
|
||||
* Message upload size limit.
|
||||
* @var int
|
||||
*/
|
||||
$APPENDLIMIT,
|
||||
|
||||
/**
|
||||
* RFC8474
|
||||
* RFC 8474
|
||||
* A server-allocated unique identifier for the mailbox.
|
||||
* This response also occurs as a result of a CREATE, SELECT or EXAMINE command.
|
||||
* @var string
|
||||
|
|
Loading…
Reference in a new issue