mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-09-20 15:45:55 +08:00
Fix RFC 9051 IMAP4rev2 keywords and $ReadReceipt should be $MDNSent
This commit is contained in:
parent
eb61563db4
commit
1e61171f9c
|
@ -307,11 +307,19 @@ export class MessageModel extends AbstractModel {
|
|||
hasFlaggedSubMessage: this.hasFlaggedSubMessage()
|
||||
}, (key, value) => value && classes.push(key));
|
||||
this.flags().forEach(value => {
|
||||
'\\' !== value[0] && classes.push('flag-'+value);
|
||||
'\\' !== value[0] && '$forwarded' !== value && classes.push('flag-'+value);
|
||||
});
|
||||
return classes.join(' ');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* https://datatracker.ietf.org/doc/html/rfc5788
|
||||
*/
|
||||
keywords() {
|
||||
return this.flags().filter(value => '\\' !== value[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {string}
|
||||
*/
|
||||
|
|
|
@ -566,20 +566,20 @@ export class MailMessageView extends AbstractViewRight {
|
|||
readReceipt() {
|
||||
let oMessage = currentMessage()
|
||||
if (oMessage.readReceipt()) {
|
||||
Remote.request('SendReadReceiptMessage', null, {
|
||||
Remote.request('SendReadReceiptMessage', iError => {
|
||||
if (!iError) {
|
||||
oMessage.flags.push('$mdnsent');
|
||||
// oMessage.flags.valueHasMutated();
|
||||
MessageFlagsCache.store(oMessage);
|
||||
MessagelistUserStore.reloadFlagsAndCachedMessage();
|
||||
}
|
||||
}, {
|
||||
MessageFolder: oMessage.folder,
|
||||
MessageUid: oMessage.uid,
|
||||
ReadReceipt: oMessage.readReceipt(),
|
||||
Subject: i18n('READ_RECEIPT/SUBJECT', { SUBJECT: oMessage.subject() }),
|
||||
Text: i18n('READ_RECEIPT/BODY', { 'READ-RECEIPT': AccountUserStore.email() })
|
||||
});
|
||||
|
||||
oMessage.flags.push('$mdnsent');
|
||||
// oMessage.flags.valueHasMutated();
|
||||
|
||||
MessageFlagsCache.store(oMessage);
|
||||
|
||||
MessagelistUserStore.reloadFlagsAndCachedMessage();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -18,10 +18,17 @@ namespace MailSo\Imap\Enumerations;
|
|||
*/
|
||||
abstract class MessageFlag
|
||||
{
|
||||
// const RECENT = '\\Recent'; // IMAP4rev2 deprecated
|
||||
const SEEN = '\\Seen';
|
||||
const DELETED = '\\Deleted';
|
||||
const FLAGGED = '\\Flagged';
|
||||
const ANSWERED = '\\Answered';
|
||||
const DRAFT = '\\Draft';
|
||||
const
|
||||
// RECENT = '\\Recent', // IMAP4rev2 deprecated
|
||||
SEEN = '\\Seen',
|
||||
DELETED = '\\Deleted',
|
||||
FLAGGED = '\\Flagged',
|
||||
ANSWERED = '\\Answered',
|
||||
DRAFT = '\\Draft',
|
||||
// https://datatracker.ietf.org/doc/html/rfc9051#section-2.3.2
|
||||
FORWARDED = '$Forwarded',
|
||||
MDNSENT = '$MDNSent',
|
||||
JUNK = '$Junk',
|
||||
NOTJUNK = '$NotJunk',
|
||||
PHISHING = '$Phishing';
|
||||
}
|
||||
|
|
|
@ -187,16 +187,10 @@ trait Messages
|
|||
{
|
||||
case 'reply':
|
||||
case 'reply-all':
|
||||
$this->MailClient()->MessageSetFlag($sDraftInfoFolder, new SequenceSet($iDraftInfoUid),
|
||||
MessageFlag::ANSWERED);
|
||||
$this->MailClient()->MessageSetFlag($sDraftInfoFolder, new SequenceSet($iDraftInfoUid), MessageFlag::ANSWERED);
|
||||
break;
|
||||
case 'forward':
|
||||
$sForwardedFlag = $this->Config()->Get('labs', 'imap_forwarded_flag', '');
|
||||
if (\strlen($sForwardedFlag))
|
||||
{
|
||||
$this->MailClient()->MessageSetFlag($sDraftInfoFolder, new SequenceSet($iDraftInfoUid),
|
||||
$sForwardedFlag);
|
||||
}
|
||||
$this->MailClient()->MessageSetFlag($sDraftInfoFolder, new SequenceSet($iDraftInfoUid), MessageFlag::FORWARDED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -351,22 +345,18 @@ trait Messages
|
|||
|
||||
$mResult = true;
|
||||
|
||||
$sReadReceiptFlag = $this->Config()->Get('labs', 'imap_read_receipt_flag', '');
|
||||
if (!empty($sReadReceiptFlag))
|
||||
$sFolderFullName = $this->GetActionParam('MessageFolder', '');
|
||||
$iUid = (int) $this->GetActionParam('MessageUid', 0);
|
||||
|
||||
$this->Cacher($oAccount)->Set(\RainLoop\KeyPathHelper::ReadReceiptCache($oAccount->Email(), $sFolderFullName, $iUid), '1');
|
||||
|
||||
if (\strlen($sFolderFullName) && 0 < $iUid)
|
||||
{
|
||||
$sFolderFullName = $this->GetActionParam('MessageFolder', '');
|
||||
$iUid = (int) $this->GetActionParam('MessageUid', 0);
|
||||
|
||||
$this->Cacher($oAccount)->Set(\RainLoop\KeyPathHelper::ReadReceiptCache($oAccount->Email(), $sFolderFullName, $iUid), '1');
|
||||
|
||||
if (\strlen($sFolderFullName) && 0 < $iUid)
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
$this->MailClient()->MessageSetFlag($sFolderFullName, new SequenceSet($iUid), $sReadReceiptFlag, true, true);
|
||||
}
|
||||
catch (\Throwable $oException) {}
|
||||
$this->MailClient()->MessageSetFlag($sFolderFullName, new SequenceSet($iUid), MessageFlag::MDNSENT, true, true);
|
||||
}
|
||||
catch (\Throwable $oException) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -523,11 +513,10 @@ trait Messages
|
|||
|
||||
$sFromFolder = $this->GetActionParam('FromFolder', '');
|
||||
$sToFolder = $this->GetActionParam('ToFolder', '');
|
||||
$bMarkAsRead = !empty($this->GetActionParam('MarkAsRead', '0'));
|
||||
|
||||
$oUids = new SequenceSet(\explode(',', (string) $this->GetActionParam('Uids', '')));
|
||||
|
||||
if ($bMarkAsRead)
|
||||
if (!empty($this->GetActionParam('MarkAsRead', '0')))
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -539,6 +528,25 @@ trait Messages
|
|||
}
|
||||
}
|
||||
|
||||
$sLearning = $this->GetActionParam('Learning', '');
|
||||
if ($sLearning)
|
||||
{
|
||||
try
|
||||
{
|
||||
if ('SPAM' === $sLearning) {
|
||||
$this->MailClient()->MessageSetFlag($sFromFolder, $oUids, MessageFlag::JUNK);
|
||||
$this->MailClient()->MessageSetFlag($sFromFolder, $oUids, MessageFlag::NOTJUNK, false);
|
||||
} else if ('HAM' === $sLearning) {
|
||||
$this->MailClient()->MessageSetFlag($sFromFolder, $oUids, MessageFlag::NOTJUNK);
|
||||
$this->MailClient()->MessageSetFlag($sFromFolder, $oUids, MessageFlag::JUNK, false);
|
||||
}
|
||||
}
|
||||
catch (\Throwable $oException)
|
||||
{
|
||||
unset($oException);
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$this->MailClient()->MessageMove($sFromFolder, $sToFolder, $oUids,
|
||||
|
|
|
@ -194,10 +194,12 @@ trait Response
|
|||
'FileName' => (\strlen($sSubject) ? \MailSo\Base\Utils::ClearXss($sSubject) : 'message-'.$mResult['Uid']) . '.eml'
|
||||
));
|
||||
|
||||
$sForwardedFlag = \strtolower($this->Config()->Get('labs', 'imap_forwarded_flag', ''));
|
||||
$sReadReceiptFlag = \strtolower($this->Config()->Get('labs', 'imap_read_receipt_flag', ''));
|
||||
\strlen($sForwardedFlag) && \in_array($sForwardedFlag, $mResult['Flags']) && \array_push($mResult['Flags'], '$forwarded');
|
||||
\strlen($sReadReceiptFlag) && \in_array($sReadReceiptFlag, $mResult['Flags']) && \array_push($mResult['Flags'], '$mdnsent');
|
||||
// https://datatracker.ietf.org/doc/html/rfc5788#section-3.4.1
|
||||
$key = \array_search('$readreceipt', $mResult['Flags']);
|
||||
if (false !== $key) {
|
||||
$mResult['Flags'][$key] = '$mdnsent';
|
||||
}
|
||||
|
||||
$mResult['Flags'] = \array_unique($mResult['Flags']);
|
||||
|
||||
if ('Message' === $sParent)
|
||||
|
@ -220,6 +222,7 @@ trait Response
|
|||
|
||||
if (\strlen($mResult['ReadReceipt']) && !\in_array('$forwarded', $mResult['Flags']))
|
||||
{
|
||||
// \in_array('$mdnsent', $mResult['Flags'])
|
||||
if (\strlen($mResult['ReadReceipt']))
|
||||
{
|
||||
try
|
||||
|
|
|
@ -355,8 +355,6 @@ Enables caching in the system'),
|
|||
'use_imap_thread' => array(true),
|
||||
'use_imap_move' => array(false),
|
||||
'use_imap_expunge_all_on_delete' => array(false),
|
||||
'imap_forwarded_flag' => array('$Forwarded'),
|
||||
'imap_read_receipt_flag' => array('$ReadReceipt'),
|
||||
'imap_body_text_limit' => array(555000),
|
||||
'imap_message_list_fast_simple_search' => array(true),
|
||||
'imap_message_list_count_limit_trigger' => array(0),
|
||||
|
|
Loading…
Reference in a new issue