mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-09-20 07:35:55 +08:00
v2.37.3
This commit is contained in:
parent
5e4520e10c
commit
1ad946d013
17
CHANGELOG.md
17
CHANGELOG.md
|
@ -1,8 +1,14 @@
|
||||||
## 2.37.3 – 2024-08-13
|
## 2.37.3 – 2024-08-27
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
- Mark images with width=1 as tracking pixel
|
||||||
|
- Show warning in Admin -> About when PHP runs in 32bit
|
||||||
- Edit ACL rules
|
- Edit ACL rules
|
||||||
[#157](https://github.com/the-djmaze/snappymail/issues/157)
|
[#157](https://github.com/the-djmaze/snappymail/issues/157)
|
||||||
|
- Show GnuPG version for
|
||||||
|
[#1560](https://github.com/the-djmaze/snappymail/issues/1560)
|
||||||
|
- Make sure only scalar values are allowed in $_ENV for
|
||||||
|
[#1560](https://github.com/the-djmaze/snappymail/issues/1560)
|
||||||
- Change minimum new mail check interval
|
- Change minimum new mail check interval
|
||||||
[#1678](https://github.com/the-djmaze/snappymail/issues/1678)
|
[#1678](https://github.com/the-djmaze/snappymail/issues/1678)
|
||||||
- Sieve editor does not support "index" extension
|
- Sieve editor does not support "index" extension
|
||||||
|
@ -10,17 +16,26 @@
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Improved domain autoconfig interaction
|
- Improved domain autoconfig interaction
|
||||||
|
- MS autodiscover priorities DNS over subdomain
|
||||||
- Simplify sieve scripts list
|
- Simplify sieve scripts list
|
||||||
[#1675](https://github.com/the-djmaze/snappymail/issues/1675)
|
[#1675](https://github.com/the-djmaze/snappymail/issues/1675)
|
||||||
- Handling of (token) errors due to
|
- Handling of (token) errors due to
|
||||||
[#1706](https://github.com/the-djmaze/snappymail/issues/1706)
|
[#1706](https://github.com/the-djmaze/snappymail/issues/1706)
|
||||||
|
- Sabre/Xml to v4.0.5
|
||||||
- Update Chinese by @Artoria2e5
|
- Update Chinese by @Artoria2e5
|
||||||
|
- Update French by @hguilbert
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Thread sorting visible after disabling the imap capability
|
- Thread sorting visible after disabling the imap capability
|
||||||
[#1574](https://github.com/the-djmaze/snappymail/issues/1574)
|
[#1574](https://github.com/the-djmaze/snappymail/issues/1574)
|
||||||
- Creating new message impossible as long as a draft exists?
|
- Creating new message impossible as long as a draft exists?
|
||||||
[#1710](https://github.com/the-djmaze/snappymail/issues/1710)
|
[#1710](https://github.com/the-djmaze/snappymail/issues/1710)
|
||||||
|
- InvalidToken error at login
|
||||||
|
[#1706](https://github.com/the-djmaze/snappymail/issues/1706)
|
||||||
|
|
||||||
|
### Nextcloud
|
||||||
|
- Force Nextcloud personal language by default
|
||||||
|
[#1428](https://github.com/the-djmaze/snappymail/issues/1428)
|
||||||
|
|
||||||
|
|
||||||
## 2.37.2 – 2024-08-13
|
## 2.37.2 – 2024-08-13
|
||||||
|
|
24
README.md
24
README.md
|
@ -140,26 +140,26 @@ RainLoop 1.17 vs SnappyMail
|
||||||
|
|
||||||
|js/* |RainLoop |Snappy |
|
|js/* |RainLoop |Snappy |
|
||||||
|--------------- |--------: |--------: |
|
|--------------- |--------: |--------: |
|
||||||
|admin.js |2.170.153 | 84.054 |
|
|admin.js |2.170.153 | 84.203 |
|
||||||
|app.js |4.207.787 | 441.754 |
|
|app.js |4.207.787 | 445.359 |
|
||||||
|boot.js | 868.735 | 4.147 |
|
|boot.js | 868.735 | 4.343 |
|
||||||
|libs.js | 658.812 | 193.716 |
|
|libs.js | 658.812 | 193.716 |
|
||||||
|sieve.js | 0 | 84.598 |
|
|sieve.js | 0 | 84.571 |
|
||||||
|polyfills.js | 334.608 | 0 |
|
|polyfills.js | 334.608 | 0 |
|
||||||
|serviceworker.js | 0 | 285 |
|
|serviceworker.js | 0 | 285 |
|
||||||
|TOTAL |8.240.095 | 808.554 |
|
|TOTAL |8.240.095 | 812.477 |
|
||||||
|
|
||||||
|js/min/* |RainLoop |Snappy |RL gzip |SM gzip |RL brotli |SM brotli |
|
|js/min/* |RainLoop |Snappy |RL gzip |SM gzip |RL brotli |SM brotli |
|
||||||
|--------------- |--------: |--------: |------: |------: |--------: |--------: |
|
|--------------- |--------: |--------: |------: |------: |--------: |--------: |
|
||||||
|admin.min.js | 256.831 | 41.162 | 73.606 | 13.885 | 60.877 | 12.434 |
|
|admin.min.js | 256.831 | 41.256 | 73.606 | 13.940 | 60.877 | 12.493 |
|
||||||
|app.min.js | 515.367 | 199.730 |139.456 | 67.669 |110.485 | 57.672 |
|
|app.min.js | 515.367 | 201.270 |139.456 | 68.096 |110.485 | 58.078 |
|
||||||
|boot.min.js | 84.659 | 2.087 | 26.998 | 1.204 | 23.643 | 1.002 |
|
|boot.min.js | 84.659 | 2.231 | 26.998 | 1.271 | 23.643 | 1.067 |
|
||||||
|libs.min.js | 584.772 | 92.365 |180.901 | 34.487 |155.182 | 30.830 |
|
|libs.min.js | 584.772 | 92.365 |180.901 | 34.487 |155.182 | 30.830 |
|
||||||
|sieve.min.js | 0 | 41.093 | 0 | 10.325 | 0 | 9.327 |
|
|sieve.min.js | 0 | 41.288 | 0 | 10.327 | 0 | 9.318 |
|
||||||
|polyfills.min.js | 32.837 | 0 | 11.406 | 0 | 10.175 | 0 |
|
|polyfills.min.js | 32.837 | 0 | 11.406 | 0 | 10.175 | 0 |
|
||||||
|TOTAL user |1.217.635 | 294.182 |358.761 |103.360 |299.485 | 89.504 |
|
|TOTAL user |1.217.635 | 295.866 |358.761 |103.854 |299.485 | 89.975 |
|
||||||
|TOTAL user+sieve |1.217.635 | 335.275 |358.761 |113.685 |299.485 | 98.831 |
|
|TOTAL user+sieve |1.217.635 | 337.154 |358.761 |114.181 |299.485 | 99.293 |
|
||||||
|TOTAL admin | 959.099 | 135.614 |292.911 | 49.576 |249.877 | 44.266 |
|
|TOTAL admin | 959.099 | 135.852 |292.911 | 49.698 |249.877 | 44.390 |
|
||||||
|
|
||||||
For a user it is around 68% smaller and faster than traditional RainLoop.
|
For a user it is around 68% smaller and faster than traditional RainLoop.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
This app packages SnappyMail <upstream>2.37.2</upstream>.
|
This app packages SnappyMail <upstream>2.37.3</upstream>.
|
||||||
|
|
||||||
SnappyMail is a simple, modern, lightweight & fast web-based email client.
|
SnappyMail is a simple, modern, lightweight & fast web-based email client.
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ RUN mkdir -p /app/code
|
||||||
WORKDIR /app/code
|
WORKDIR /app/code
|
||||||
|
|
||||||
# If you change the extraction below, be sure to test on scaleway
|
# If you change the extraction below, be sure to test on scaleway
|
||||||
VERSION=2.37.2
|
VERSION=2.37.3
|
||||||
RUN wget https://github.com/the-djmaze/snappymail/releases/download/v${VERSION}/snappymail-${VERSION}.zip -O /tmp/snappymail.zip && \
|
RUN wget https://github.com/the-djmaze/snappymail/releases/download/v${VERSION}/snappymail-${VERSION}.zip -O /tmp/snappymail.zip && \
|
||||||
unzip /tmp/snappymail.zip -d /app/code && \
|
unzip /tmp/snappymail.zip -d /app/code && \
|
||||||
rm /tmp/snappymail.zip && \
|
rm /tmp/snappymail.zip && \
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<id>snappymail</id>
|
<id>snappymail</id>
|
||||||
<name>SnappyMail</name>
|
<name>SnappyMail</name>
|
||||||
<summary>SnappyMail Webmail</summary>
|
<summary>SnappyMail Webmail</summary>
|
||||||
<version>2.37.2</version>
|
<version>2.37.3</version>
|
||||||
<licence>agpl</licence>
|
<licence>agpl</licence>
|
||||||
<author>SnappyMail, RainLoop Team, Nextgen-Networks, Tab Fitts, Nathan Kinkade, Pierre-Alain Bandinelli</author>
|
<author>SnappyMail, RainLoop Team, Nextgen-Networks, Tab Fitts, Nathan Kinkade, Pierre-Alain Bandinelli</author>
|
||||||
<description><![CDATA[**Lightweight & fast email client.**
|
<description><![CDATA[**Lightweight & fast email client.**
|
||||||
|
|
|
@ -20,7 +20,7 @@ return "SnappyMail Webmail is a browser-based multilingual IMAP client with an a
|
||||||
# script_snappymail_versions()
|
# script_snappymail_versions()
|
||||||
sub script_snappymail_versions
|
sub script_snappymail_versions
|
||||||
{
|
{
|
||||||
return ( "2.37.2" );
|
return ( "2.37.3" );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub script_snappymail_version_desc
|
sub script_snappymail_version_desc
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"title": "SnappyMail",
|
"title": "SnappyMail",
|
||||||
"description": "Simple, modern & fast web-based email client",
|
"description": "Simple, modern & fast web-based email client",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "2.37.2",
|
"version": "2.37.3",
|
||||||
"homepage": "https://snappymail.eu",
|
"homepage": "https://snappymail.eu",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "DJ Maze",
|
"name": "DJ Maze",
|
||||||
|
|
|
@ -116,12 +116,16 @@ class AvatarsPlugin extends \RainLoop\Plugins\AbstractPlugin
|
||||||
* Nextcloud Mail uses insecure unencrypted 'index.php/apps/mail/api/avatars/url/local%40example.com'
|
* Nextcloud Mail uses insecure unencrypted 'index.php/apps/mail/api/avatars/url/local%40example.com'
|
||||||
*/
|
*/
|
||||||
// public function ServiceAvatar(...$aParts)
|
// public function ServiceAvatar(...$aParts)
|
||||||
public function ServiceAvatar(string $sServiceName, string $sBimi, string $sEmail)
|
public function ServiceAvatar(string $sServiceName, string $sBimi, string $sEncryptedEmail)
|
||||||
{
|
{
|
||||||
$sEmail = \SnappyMail\Crypt::DecryptUrlSafe($sEmail);
|
$maxAge = 86400;
|
||||||
|
$sEmail = \SnappyMail\Crypt::DecryptUrlSafe($sEncryptedEmail);
|
||||||
$aBimi = \explode('-', $sBimi, 2);
|
$aBimi = \explode('-', $sBimi, 2);
|
||||||
$sBimiSelector = isset($aBimi[1]) ? $aBimi[1] : 'default';
|
$sBimiSelector = isset($aBimi[1]) ? $aBimi[1] : 'default';
|
||||||
|
// $sEmail && \MailSo\Base\Http::setETag("{$sBimiSelector}-{$sEncryptedEmail}");
|
||||||
if ($sEmail && ($aResult = $this->getAvatar($sEmail, !empty($aBimi[0]), $sBimiSelector))) {
|
if ($sEmail && ($aResult = $this->getAvatar($sEmail, !empty($aBimi[0]), $sBimiSelector))) {
|
||||||
|
\header("Cache-Control: max-age={$maxAge}, private");
|
||||||
|
\header('Expires: '.\gmdate('D, j M Y H:i:s', $maxAge + \time()).' UTC');
|
||||||
\header('Content-Type: '.$aResult[0]);
|
\header('Content-Type: '.$aResult[0]);
|
||||||
echo $aResult[1];
|
echo $aResult[1];
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -184,6 +184,7 @@ trait Accounts
|
||||||
$bReload = false;
|
$bReload = false;
|
||||||
$oAccount = $this->getAccountFromToken();
|
$oAccount = $this->getAccountFromToken();
|
||||||
if ($oAccount instanceof AdditionalAccount && $oAccount->Email() === $sEmailToDelete) {
|
if ($oAccount instanceof AdditionalAccount && $oAccount->Email() === $sEmailToDelete) {
|
||||||
|
// $this->SetAdditionalAuthToken(null);
|
||||||
\SnappyMail\Cookies::clear(self::AUTH_ADDITIONAL_TOKEN_KEY);
|
\SnappyMail\Cookies::clear(self::AUTH_ADDITIONAL_TOKEN_KEY);
|
||||||
$bReload = true;
|
$bReload = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,12 +76,16 @@ abstract class Base
|
||||||
function __destruct()
|
function __destruct()
|
||||||
{
|
{
|
||||||
$this->proc_close();
|
$this->proc_close();
|
||||||
|
|
||||||
$gpgconf = static::findBinary('gpgconf');
|
$gpgconf = static::findBinary('gpgconf');
|
||||||
if ($gpgconf) {
|
if ($gpgconf) {
|
||||||
|
$cmd = $gpgconf . ' --kill gpg-agent';
|
||||||
|
// https://github.com/the-djmaze/snappymail/issues/1560#issuecomment-2144817883
|
||||||
|
// if (\version_compare($this->version, '2.4.0', '<')) {
|
||||||
|
$cmd .= ' ' . \escapeshellarg($this->options['homedir']);
|
||||||
|
// }
|
||||||
$env = ['GNUPGHOME' => $this->options['homedir']];
|
$env = ['GNUPGHOME' => $this->options['homedir']];
|
||||||
$pipes = [];
|
$pipes = [];
|
||||||
if ($process = \proc_open($gpgconf . ' --kill gpg-agent --homedir ' . \escapeshellarg($this->options['homedir']), [], $pipes, null, $env)) {
|
if ($process = \proc_open($cmd, [], $pipes, null, $env)) {
|
||||||
\proc_close($process);
|
\proc_close($process);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,20 +58,6 @@ class SMIME extends Base
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function __destruct()
|
|
||||||
{
|
|
||||||
$this->proc_close();
|
|
||||||
|
|
||||||
$gpgconf = static::findBinary('gpgconf');
|
|
||||||
if ($gpgconf) {
|
|
||||||
$env = ['GNUPGHOME' => $this->options['homedir']];
|
|
||||||
$pipes = [];
|
|
||||||
if ($process = \proc_open($gpgconf . ' --kill gpg-agent --homedir ' . \escapeshellarg($this->options['homedir']), [], $pipes, null, $env)) {
|
|
||||||
\proc_close($process);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function isSupported() : bool
|
public static function isSupported() : bool
|
||||||
{
|
{
|
||||||
return parent::isSupported() && static::findBinary('gpgsm');
|
return parent::isSupported() && static::findBinary('gpgsm');
|
||||||
|
|
1
vendors/knockout/src/utils.js
vendored
1
vendors/knockout/src/utils.js
vendored
|
@ -25,6 +25,7 @@ ko.utils = {
|
||||||
: node => node.cloneNode(true)),
|
: node => node.cloneNode(true)),
|
||||||
|
|
||||||
setDomNodeChildren: (domNode, childNodes) => {
|
setDomNodeChildren: (domNode, childNodes) => {
|
||||||
|
// domNode.replaceChildren(...childNodes);
|
||||||
ko.utils.emptyDomNode(domNode);
|
ko.utils.emptyDomNode(domNode);
|
||||||
childNodes && domNode.append(...childNodes);
|
childNodes && domNode.append(...childNodes);
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue