mirror of
https://github.com/stalwartlabs/stalwart.git
synced 2026-03-17 14:34:03 +00:00
v0.15.5
This commit is contained in:
28
.github/workflows/sponsors.yml
vendored
28
.github/workflows/sponsors.yml
vendored
@@ -1,28 +0,0 @@
|
|||||||
name: Generate Sponsors README
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: 30 15 * * 0-6
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
jobs:
|
|
||||||
deploy:
|
|
||||||
if: github.event_name != 'schedule' || !github.event.repository.fork
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout 🛎️
|
|
||||||
uses: actions/checkout@v6.0.1
|
|
||||||
|
|
||||||
- name: Generate Sponsors 💖
|
|
||||||
uses: JamesIves/github-sponsors-readme-action@v1
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.SPONSORS_PAT }}
|
|
||||||
file: 'README.md'
|
|
||||||
minimum: 2500
|
|
||||||
organization: true
|
|
||||||
|
|
||||||
- name: Deploy to GitHub Pages 🚀
|
|
||||||
uses: JamesIves/github-pages-deploy-action@v4
|
|
||||||
with:
|
|
||||||
branch: main
|
|
||||||
folder: '.'
|
|
||||||
18
CHANGELOG.md
18
CHANGELOG.md
@@ -2,6 +2,24 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
|
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## [0.15.5] - 2026-02-14
|
||||||
|
|
||||||
|
If you are upgrading from v0.14.x and below, this version includes **multiple breaking changes**. Please read the [upgrading documentation](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING/v0_15.md) for more information on how to upgrade from previous versions.
|
||||||
|
If you are upgrading from v0.15.x, replace the binary and update the webadmin.
|
||||||
|
|
||||||
|
## Added
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
|
||||||
|
## Fixed
|
||||||
|
- IMAP/JMAP: OOM when `mail-parser` returns cyclical MIME structures.
|
||||||
|
- Tracing: Fix tracing indexing when using separate stores.
|
||||||
|
- JMAP: Fix `upToId` computation in `*/queryChanges`.
|
||||||
|
- JMAP: Include createdIds when the property is present.
|
||||||
|
- JMAP: Respect query arguments in `Email/queryChanges`.
|
||||||
|
- JMAP: Return the correct container/item change id when there are no changes.
|
||||||
|
|
||||||
|
|
||||||
## [0.15.4] - 2026-01-19
|
## [0.15.4] - 2026-01-19
|
||||||
|
|
||||||
If you are upgrading from v0.14.x and below, this version includes **multiple breaking changes**. Please read the [upgrading documentation](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING/v0_15.md) for more information on how to upgrade from previous versions.
|
If you are upgrading from v0.14.x and below, this version includes **multiple breaking changes**. Please read the [upgrading documentation](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING/v0_15.md) for more information on how to upgrade from previous versions.
|
||||||
|
|||||||
633
Cargo.lock
generated
633
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -155,11 +155,7 @@ Of course, development doesn’t stop there. The community has contributed hundr
|
|||||||
|
|
||||||
Your support is crucial in helping us continue to improve the project, add new features, and maintain the highest level of quality. By [becoming a sponsor](https://opencollective.com/stalwart), you help fund the development and future of Stalwart. As a thank-you, sponsors who contribute $5 per month or more will automatically receive a [Enterprise edition](https://stalw.art/enterprise/) license. And, sponsors who contribute $30 per month or more, also have access to [Premium Support](https://stalw.art/support) from Stalwart Labs.
|
Your support is crucial in helping us continue to improve the project, add new features, and maintain the highest level of quality. By [becoming a sponsor](https://opencollective.com/stalwart), you help fund the development and future of Stalwart. As a thank-you, sponsors who contribute $5 per month or more will automatically receive a [Enterprise edition](https://stalw.art/enterprise/) license. And, sponsors who contribute $30 per month or more, also have access to [Premium Support](https://stalw.art/support) from Stalwart Labs.
|
||||||
|
|
||||||
These are some of our open-source sponsors:
|
<br/>If you would like to support our open source work, please consider [becoming a sponsor](https://opencollective.com/stalwart).
|
||||||
|
|
||||||
<!-- sponsors --><a href="https://github.com/kbjr"><img src="https://github.com/kbjr.png" width="60px" alt="User avatar: James Brumond" /></a><a href="https://github.com/MailRoute"><img src="https://github.com/MailRoute.png" width="60px" alt="User avatar: MailRoute, Inc." /></a><a href="https://github.com/starsong-consulting"><img src="https://github.com/starsong-consulting.png" width="60px" alt="User avatar: Starsong GmbH" /></a><a href="https://github.com/mingfu-design"><img src="https://github.com/mingfu-design.png" width="60px" alt="User avatar: Ming Fu Design Ltd. 明孚設計有限公司" /></a><a href="https://github.com/tamwuff"><img src="https://github.com/tamwuff.png" width="60px" alt="User avatar: Tamino" /></a><a href="https://github.com/panascais"><img src="https://github.com/panascais.png" width="60px" alt="User avatar: panascais" /></a><a href="https://github.com/JanAxelJonsson"><img src="https://github.com/JanAxelJonsson.png" width="60px" alt="User avatar: Jan Jonsson" /></a><!-- sponsors -->
|
|
||||||
|
|
||||||
<br/>If you would like to support our work, please consider [becoming a sponsor](https://opencollective.com/stalwart).
|
|
||||||
|
|
||||||
## Funding
|
## Funding
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ authors = ["Stalwart Labs LLC <hello@stalw.art>"]
|
|||||||
license = "AGPL-3.0-only OR LicenseRef-SEL"
|
license = "AGPL-3.0-only OR LicenseRef-SEL"
|
||||||
repository = "https://github.com/stalwartlabs/cli"
|
repository = "https://github.com/stalwartlabs/cli"
|
||||||
homepage = "https://github.com/stalwartlabs/cli"
|
homepage = "https://github.com/stalwartlabs/cli"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "common"
|
name = "common"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "dav-proto"
|
name = "dav-proto"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "dav"
|
name = "dav"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "directory"
|
name = "directory"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "email"
|
name = "email"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "groupware"
|
name = "groupware"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "http_proto"
|
name = "http_proto"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "http"
|
name = "http"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "imap_proto"
|
name = "imap_proto"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "imap"
|
name = "imap"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -865,6 +865,10 @@ impl AsImapDataItem for ArchivedMessageMetadata {
|
|||||||
let nested_message = self.message_id(*nested_message_id);
|
let nested_message = self.message_id(*nested_message_id);
|
||||||
part.set_envelope(nested_message.envelope());
|
part.set_envelope(nested_message.envelope());
|
||||||
if let Some(root_part) = root_part {
|
if let Some(root_part) = root_part {
|
||||||
|
if stack.len() == 10_000 {
|
||||||
|
debug_assert!(false, "Too much nesting in message metadata");
|
||||||
|
return root_part;
|
||||||
|
}
|
||||||
stack.push((root_part, parts, (message, message_id).into()));
|
stack.push((root_part, parts, (message, message_id).into()));
|
||||||
}
|
}
|
||||||
root_part = part.into();
|
root_part = part.into();
|
||||||
@@ -875,6 +879,10 @@ impl AsImapDataItem for ArchivedMessageMetadata {
|
|||||||
}
|
}
|
||||||
ArchivedMetadataPartType::Multipart(subparts) => {
|
ArchivedMetadataPartType::Multipart(subparts) => {
|
||||||
if let Some(root_part) = root_part {
|
if let Some(root_part) = root_part {
|
||||||
|
if stack.len() == 10_000 {
|
||||||
|
debug_assert!(false, "Too much nesting in message metadata");
|
||||||
|
return root_part;
|
||||||
|
}
|
||||||
stack.push((root_part, parts, None));
|
stack.push((root_part, parts, None));
|
||||||
}
|
}
|
||||||
root_part = part.into();
|
root_part = part.into();
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "jmap_proto"
|
name = "jmap_proto"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "jmap"
|
name = "jmap"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -128,6 +128,10 @@ impl ToBodyPart for Vec<MessagePart<'_>> {
|
|||||||
subparts.push(values);
|
subparts.push(values);
|
||||||
|
|
||||||
if let Some(multipart) = multipart {
|
if let Some(multipart) = multipart {
|
||||||
|
if parts_stack.len() == 10_000 {
|
||||||
|
debug_assert!(false, "Too much nesting in message metadata");
|
||||||
|
return Value::Null;
|
||||||
|
}
|
||||||
let multipart = multipart.clone();
|
let multipart = multipart.clone();
|
||||||
parts_stack.push((
|
parts_stack.push((
|
||||||
parts,
|
parts,
|
||||||
@@ -258,6 +262,10 @@ impl ToBodyPart for ArchivedMessageMetadataContents {
|
|||||||
subparts.push(values);
|
subparts.push(values);
|
||||||
|
|
||||||
if let Some(multipart) = multipart {
|
if let Some(multipart) = multipart {
|
||||||
|
if parts_stack.len() == 10_000 {
|
||||||
|
debug_assert!(false, "Too much nesting in message metadata");
|
||||||
|
return Value::Null;
|
||||||
|
}
|
||||||
let multipart = multipart
|
let multipart = multipart
|
||||||
.iter()
|
.iter()
|
||||||
.map(|id| u16::from(id) as u32)
|
.map(|id| u16::from(id) as u32)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ homepage = "https://stalw.art"
|
|||||||
keywords = ["imap", "jmap", "smtp", "email", "mail", "webdav", "server"]
|
keywords = ["imap", "jmap", "smtp", "email", "mail", "webdav", "server"]
|
||||||
categories = ["email"]
|
categories = ["email"]
|
||||||
license = "AGPL-3.0-only OR LicenseRef-SEL"
|
license = "AGPL-3.0-only OR LicenseRef-SEL"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "managesieve"
|
name = "managesieve"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "migration"
|
name = "migration"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nlp"
|
name = "nlp"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "pop3"
|
name = "pop3"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "services"
|
name = "services"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ homepage = "https://stalw.art/smtp"
|
|||||||
keywords = ["smtp", "email", "mail", "server"]
|
keywords = ["smtp", "email", "mail", "server"]
|
||||||
categories = ["email"]
|
categories = ["email"]
|
||||||
license = "AGPL-3.0-only OR LicenseRef-SEL"
|
license = "AGPL-3.0-only OR LicenseRef-SEL"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "spam-filter"
|
name = "spam-filter"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "store"
|
name = "store"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "trc"
|
name = "trc"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "event_macro"
|
name = "event_macro"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "types"
|
name = "types"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "utils"
|
name = "utils"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "proc_macros"
|
name = "proc_macros"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "tests"
|
name = "tests"
|
||||||
version = "0.15.4"
|
version = "0.15.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
|||||||
Reference in New Issue
Block a user