Metadata-Version: 2.5
Name: rsml
Version: 0.1.5
Summary: a small, self-hosted mailing list system.
Project-URL: Homepage, https://github.com/juanvel4000/rsml
Project-URL: Repository, https://github.com/juanvel4000/rsml
Project-URL: Issues, https://github.com/juanvel4000/rsml/issues
Project-URL: Changelog, https://github.com/juanvel4000/rsml/blob/main/CHANGELOG.md
Author: juanvel400
License-Expression: BSD-3-Clause
License-File: LICENSE
Keywords: email,mailing-list,self-hosted
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Framework :: Flask
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Communications :: Email :: Mailing List Servers
Requires-Python: >=3.11
Requires-Dist: aiosmtpd
Requires-Dist: aiosmtplib
Requires-Dist: email-validator
Requires-Dist: flask[async]
Provides-Extra: dev
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: pytest-asyncio; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Description-Content-Type: text/markdown

# rsml

![PyPI License](https://img.shields.io/pypi/l/rsml)
![PyPI Status](https://img.shields.io/pypi/status/rsml)
![PyPI Version](https://img.shields.io/pypi/v/rsml)
![GitHub Actions Workflow Status (Publish)](https://img.shields.io/github/actions/workflow/status/juanvel4000/rsml/publish.yml?label=publish)
![GitHub Actions Workflow Status (Tests)](https://img.shields.io/github/actions/workflow/status/juanvel4000/rsml/tests.yml?label=tests)

a small, self-hosted mailing list system.

**rsml** is a **m**ailing **l**ist **m**anager system written in python built with minimalism in mind, it does not try to be a GNU Mailman competitor but rather a simpler alternative.

## features

- toml-based configuration (`rsml.toml`) (`rsml.config`)
- RFC 4155 and mboxrd compliant `.mbox` file generator (`rsml.mbox`)
- mailing list posting via LMTP
- two-step subscription via `/list/subscribe` and `/list/verify`
- `/list/archive` endpoint for `.mbox` archive retrieval of the mailing list
- one-click unsubscribe with `List-Unsubscribe` and `List-Unsubscribe-Post` (RFC 8058)

## dependencies

rsml requires at least

- a python `>=3.11`-compatible interpreter
- an MTA capable of receiving and sending mail through SMTP and LMTP

runtime dependencies include

- `aiosmtpd`/`aiosmtplib`: for asynchronous SMTP/LMTP operations
- `flask`: for the http server
- `email-validator`: to validate email addresses

development-time dependencies include:

- `pytest`/`pytest-asyncio`: to execute the unit tests

## usage

```sh
  $ pip install -e . # install rsml and dependencies
  $ cp rsml.toml.example rsml.toml # edit server_secret, etc.
  $ rsml http # start the http server
  $ rsml lmtp # start the lmtp server
```

running the test suite can be done with `pytest`

```sh
  $ pip install -e ".[dev]" # install dev dependencies
  $ pytest -vs . # run the unit tests
```

## spec

a document outlining the technical specifications of the project can be found in this repository as [SPEC.md](SPEC.md)

## license

BSD-3-Clause, see [LICENSE](LICENSE)
