Loomio 3.1.5
This release includes:
- New: Subscribe a Loomio group to an external email mailing list.
- Fix: Prevent duplicate threads and staff forwards when a mail server
retries delivery. - Fix: Preserve the SMTP envelope recipient when an email is delivered
through a mailing list or forwarding address. - New: Convert a group thread to a direct thread while retaining access for
its participants. - Fix: Require Bearer authentication for the trusted server API so API keys
are not accepted in URLs or request bodies. - New: Discover Loomio's user and server API documentation through
/llms.txt.
Operators using Loomio's bundled Haraka inbound-mail service must update both
the Loomio application and Haraka images. This release contains one database
migration and requires no new environment variable.
Mailing lists and forwarded email
A group's Loomio email address can now be subscribed to an external mailing
list. Loomio routes the message using the SMTP envelope recipient, so a message
can reach the group even when its visible To field contains the mailing-list
address or another address that forwarded the message.
Existing email-to-group permissions remain in effect. Loomio matches the
thread author from the visible From address. Group members are recognised
automatically, while an unrecognised sender produces an in-app notification for
group administrators to associate the address with a member or block it. A
mailing list that preserves each contributor's address may require an alias for
each sender; a list that rewrites messages to one stable From address needs
one alias.
The same envelope handling supports Loomio addresses that forward to staff
mailboxes. Forwarded messages use a Loomio sender address for delivery and keep
the original sender in Reply-To, allowing staff to reply normally.
Haraka now replaces sender-supplied routing metadata with the trusted SMTP
envelope and remains compatible with Haraka 3.3's address representation.
SPF, DKIM, DMARC, ARC, and BIMI evaluation continues to run before the message
is submitted to Loomio. Haraka returns a successful SMTP response only after
the application accepts the message, preventing an accepted message from also
being reported as a temporary failure.
Duplicate inbound email prevention
Loomio now records the email Message-ID and processes each identifier only
once. If an upstream mail server retries the same message, Loomio does not
create another thread or send another copy through a staff forwarding rule.
The database migration adds a nullable message_id column and unique index to
received_emails. Existing rows remain valid and require no backfill. Received
emails used for staff forwarding are retained until the normal 60-day cleanup
so retries can be recognised during that period.
This resolves issue #12704.
Convert a group thread to a direct thread
Thread administrators can choose Direct thread in the Move thread form.
The thread creator, the administrator making the change, commenters,
identified poll voters, and people who reacted retain access. Group members who
only viewed the thread do not retain access. The thread creator and the
administrator making the change become thread administrators.
Threads containing anonymous polls cannot be converted because deriving a
participant list could reveal who voted. Mention search also prioritises names
and handles that begin with the entered text.
Server API authentication
The trusted server API under /api/b3 now accepts B3_API_KEY only through:
Authorization: Bearer <server_api_key>Keys supplied in query strings or request bodies are rejected. Operators must
update existing server API integrations before upgrading. The user API under
/api/b2 is unchanged.
Loomio now serves /llms.txt, which links automated tools and developers to
the user and server API documentation and states their authentication and
permission boundaries.
Upgrade notes
-
Before upgrading, update every
/api/b3integration to use the
Authorization: Bearerheader. -
Edit
.envand set the application image tag:LOOMIO_CONTAINER_TAG=3.1.5
Use
3.1.5to pin this release, or3.1to track the 3.1 patch series. -
If the Haraka image is pinned separately, set it to:
loomio/haraka-rails-docker:3.1.5 -
Run the update script from the deployment directory:
./update.sh
The update must pull and recreate both the application and Haraka services.
It also runs the migration that adds the unique inbound-emailMessage-ID
index. -
Confirm that the application, worker, and Haraka services are running. Send
an inbound test message and confirm the SMTP transaction ends with a250
response and creates or forwards only one copy.
No data backfill is required.
Full changelog: v3.1.4...v3.1.5