A mail suite written in rust meant to be easy to use.

Overview

Erooster

codecov Contributor Covenant

A mail suite written in rust meant to be easy to use.

Getting started

Currently the setup is quite rough.

You need some certificates for your server (pem format) and a postgres database.

To get started you need a config.yml like this it can either be in /etc/erooster or the working dir:

tls:
  key_path: "./certs/key.pem"
  cert_path: "./certs/cert.pem"
mail:
  maildir_folders: "./maildir"
  hostname: "localhost"
database:
  postgres_url: ""
listen_ips:
  - "[::1]"
  - "127.0.0.1"
webserver:
  port: "80"
  tls: false
  displayname: Erooster
sentry: false

The maildir_folders defines where the emails and folders can be found at. This is close to the maildir format postfix uses. (We use other files to keep track of the state of it)

After that you can just do cargo run --release to run it. The server is reachable via the usual IMAP ports. STARTTLS is currently not supported.

Setting up users

To set up users you can use the eroosterctl command. It will talk to the database. So make sure your config file is set up.

To register a user you simply run eroosterctl register and follow the questions. The password is safed as an argon2 hash inside the database.

To change a password there is the change-password subcommand. You need to provide the old password and the new one. It is planned that admins can also change this using a preencrypted password instead. In the future this is going to be replaced by an integrated web interface users can directly use.

Note: The status subcommand at this time doesn't actually check the server status.

Features

  • Imap4rev2 compatible
  • Maildir support
  • TLS by default
  • Single binary
  • Low Resource usage
  • Postgres first
  • Integrated SMTP server

Non Goal

  • Implementing every single peace of optional spec
  • MySQL/Mariadb support
  • Support for imap LOGIN command (It is per rev2 spec)
  • Support for POP3
  • Support for Exchange

Error Reporting

Erosster by default does not auto report an panics or errors. It provides however a github reporting link on panics.

Additionally it is able to let ou auto report to a sentry. This also will record performance using tracing. Due to how sentry works this is not public. It is disabled by default due to gdpr rules.

To enable sentry please set sentry: true in yout config file.

Comparisons

As I made a reddit post some comparisons were made in the commands. You can check them out at https://www.reddit.com/r/rust/comments/uyxxrg/comment/ia7qwcg/?utm_source=share&utm_medium=web2x&context=3

Comments
  • Bump clap from 4.0.29 to 4.0.32

    Bump clap from 4.0.29 to 4.0.32

    Bumps clap from 4.0.29 to 4.0.32.

    Release notes

    Sourced from clap's releases.

    v4.0.32

    [4.0.32] - 2022-12-22

    Fixes

    • (parser) When overriding required(true), consider args that conflict with its group

    v4.0.31

    [4.0.31] - 2022-12-22

    Performance

    • Speed up parsing when a lot of different flags are present (100 unique flags)

    v4.0.30

    [4.0.30] - 2022-12-21

    Fixes

    • (error) Improve error for args_conflicts_with_subcommand
    Changelog

    Sourced from clap's changelog.

    [4.0.32] - 2022-12-22

    Fixes

    • (parser) When overriding required(true), consider args that conflict with its group

    [4.0.31] - 2022-12-22

    Performance

    • Speed up parsing when a lot of different flags are present (100 unique flags)

    [4.0.30] - 2022-12-21

    Fixes

    • (error) Improve error for args_conflicts_with_subcommand
    Commits
    • ec4ccf0 chore: Release
    • 13fdb83 docs: Update changelog
    • b877345 Merge pull request #4573 from epage/conflict
    • 85ecb3e fix(parser): Override required when parent group has conflict
    • d145b8b test(parser): Demonstrate required-overload bug
    • 0eccd55 chore: Release
    • 1e37c25 docs: Update changelog
    • dcd5fec Merge pull request #4572 from epage/group
    • dde22e7 style: Update for latest clippy
    • dd8435d perf(parser): Reduce duplicate lookups
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 2
  • Bump crate-ci/typos from 1.10.2 to 2.2.7

    Bump crate-ci/typos from 1.10.2 to 2.2.7

    Bumps crate-ci/typos from 1.10.2 to 2.2.7.

    Release notes

    Sourced from crate-ci/typos's releases.

    varcon-core-v2.2.3

    No release notes provided.

    varcon-core-v2.2.2

    No release notes provided.

    varcon-core-v2.2.1

    No release notes provided.

    varcon-core-v2.2.0

    No release notes provided.

    varcon-core-v2.1.1

    No release notes provided.

    varcon-core-v2.1.0

    Changes:

    • 3e66a99674a1a5f2d76910657abde5dcda2119fa chore: Release

    This list of changes was auto generated.

    varcon-core-v2.0.0

    Changes:

    • 399574536276154b00158ed3690c30d1c1d52819 chore: Release
    • bd135c4ac9b21b00774ab8f76ba8c5d03fb06fba test: Update benchsuite
    • 65d0ea238b800d648635c71f5b03c6da713108cc docs: Update changelog
    • 8863874e334950aaa420286f04b22b80f43fba45 tests: Measure ascii perf
    • 5eb4665c831bea908c95591e3abb1f01b85c1adf Merge pull request #255 from epage/ignore
    • 327a84a242cd16d97c92e8fe64fceb1243d7fb94 feat(ignore): Typos=specific ignores [ #134 ]
    • 0cf16750cc5909959b145fcdc6984002002cc8d7 docs: Balance the parens
    • 0b9733c60699386cac589dca8bed90d2e1562ad1 docs: Remove dead space
    • 75b170c2b465fc778df35b599f11156e18e6ca4f docs: Include screenshot [ #237 ]
    • 36935481eb3d971443da3b0813ee30a480ce79dc Merge pull request #254 from epage/perf
    • b99f32dea83c816f1d64a1edefb9f612a73e240e perf(dict): Bypass vars when possible [ #253 ]
    • d65fa79d0e449ccef225d54893f26f9af9395b29 refactor(dict): Make feature flag paths clearer
    • e6c595c5851a55a461710ec63cf27b5f7c57f475 Merge pull request #252 from epage/dict
    • 639e65b88af87007a37d86366c2c24d37a65e848 fix(dict): Handle cases from Linux [ #249 ]
    • fb0dac429791aa985d0b67f95f75bc5e57eef418 refactor(dict): Allow 0..n corrections in BuiltIn
    • 444d2cca91b5d041ccc6efa1784cf97a276ecfd7 Merge pull request #251 from epage/vars
    • 04e55e4e853a9a970840524963ef7fbb5d717bc4 fix(dict): Correctly connect dict with varcon
    • 77cfccb3926f8dc4f0478de395eaefdc92d24c06 refactor(varcon): Clarify check's meanings
    • fa7ce95fd159ca8bd89b5c372e6e5da41325ba2c Merge pull request #250 from epage/ci

    ... (truncated)

    Commits
    • 39b28c3 chore: Release
    • 962a0a6 docs: Update changelog
    • 6c856a0 Merge pull request #609 from epage/locale
    • f71f83b fix(cli): Don't crash on --locale
    • e87d192 Merge pull request #600 from crate-ci/dependabot/cargo/anyhow-1.0.66
    • 1f8471a Merge pull request #602 from crate-ci/dependabot/cargo/serde_json-1.0.87
    • 208ed0e chore(deps): bump anyhow from 1.0.65 to 1.0.66
    • ddbd9b6 Merge pull request #608 from epage/update
    • 87a02e2 chore: Switch to workspace inheritance
    • 1cd8a74 chore: Upgrade dependencies
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 2
  • Bump ossf/scorecard-action from 2.1.0 to 2.1.1

    Bump ossf/scorecard-action from 2.1.0 to 2.1.1

    Bumps ossf/scorecard-action from 2.1.0 to 2.1.1.

    Release notes

    Sourced from ossf/scorecard-action's releases.

    v2.1.1

    Scorecard version

    This release use Scorecard's v4.10.1

    Full Changelog: https://github.com/ossf/scorecard-action/compare/v2.1.0...v2.1.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 2
  • Bump axum-opentelemetry-middleware from `7a7a2f3` to `2a0848c`

    Bump axum-opentelemetry-middleware from `7a7a2f3` to `2a0848c`

    Bumps axum-opentelemetry-middleware from 7a7a2f3 to 2a0848c.

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 2
  • Bump vergen from 7.4.2 to 7.4.3

    Bump vergen from 7.4.2 to 7.4.3

    Bumps vergen from 7.4.2 to 7.4.3.

    Release notes

    Sourced from vergen's releases.

    v7.4.3

    • Documentation update
    • Fix for sysinfo memory reporting for machine with large amounts of memory
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 2
  • RUSTSEC-2020-0077: memmap is unmaintained

    RUSTSEC-2020-0077: memmap is unmaintained

    memmap is unmaintained

    | Details | | | ------------------- | ---------------------------------------------- | | Status | unmaintained | | Package | memmap | | Version | 0.7.0 | | URL | https://github.com/danburkert/memmap-rs/issues/90 | | Date | 2020-12-02 |

    The author of the memmap crate is unresponsive.

    Maintained alternatives:

    See advisory page for additional details.

    opened by github-actions[bot] 2
  • RUSTSEC-2021-0141: dotenv is Unmaintained

    RUSTSEC-2021-0141: dotenv is Unmaintained

    dotenv is Unmaintained

    | Details | | | ------------------- | ---------------------------------------------- | | Status | unmaintained | | Package | dotenv | | Version | 0.15.0 | | URL | https://github.com/dotenv-rs/dotenv/issues/74 | | Date | 2021-12-24 |

    dotenv by description is meant to be used in development or testing only.

    Using this in production may or may not be advisable.

    Alternatives

    The below may or may not be feasible alternative(s):

    See advisory page for additional details.

    opened by github-actions[bot] 2
  • RUSTSEC-2021-0139: ansi_term is Unmaintained

    RUSTSEC-2021-0139: ansi_term is Unmaintained

    ansi_term is Unmaintained

    | Details | | | ------------------- | ---------------------------------------------- | | Status | unmaintained | | Package | ansi_term | | Version | 0.12.1 | | URL | https://github.com/ogham/rust-ansi-term/issues/72 | | Date | 2021-08-18 |

    The maintainer has adviced this crate is deprecated and will not receive any maintenance.

    The crate does not seem to have much dependencies and may or may not be ok to use as-is.

    Last release seems to have been three years ago.

    Possible Alternative(s)

    The below list has not been vetted in any way and may or may not contain alternatives;

    See advisory page for additional details.

    opened by github-actions[bot] 2
  • RUSTSEC-2020-0071: Potential segfault in the time crate

    RUSTSEC-2020-0071: Potential segfault in the time crate

    Potential segfault in the time crate

    | Details | | | ------------------- | ---------------------------------------------- | | Package | time | | Version | 0.1.43 | | URL | https://github.com/time-rs/time/issues/293 | | Date | 2020-11-18 | | Patched versions | >=0.2.23 | | Unaffected versions | =0.2.0,=0.2.1,=0.2.2,=0.2.3,=0.2.4,=0.2.5,=0.2.6 |

    Impact

    Unix-like operating systems may segfault due to dereferencing a dangling pointer in specific circumstances. This requires an environment variable to be set in a different thread than the affected functions. This may occur without the user's knowledge, notably in a third-party library.

    The affected functions from time 0.2.7 through 0.2.22 are:

    • time::UtcOffset::local_offset_at
    • time::UtcOffset::try_local_offset_at
    • time::UtcOffset::current_local_offset
    • time::UtcOffset::try_current_local_offset
    • time::OffsetDateTime::now_local
    • time::OffsetDateTime::try_now_local

    The affected functions in time 0.1 (all versions) are:

    • at
    • at_utc
    • now

    Non-Unix targets (including Windows and wasm) are unaffected.

    Patches

    Pending a proper fix, the internal method that determines the local offset has been modified to always return None on the affected operating systems. This has the effect of returning an Err on the try_* methods and UTC on the non-try_* methods.

    Users and library authors with time in their dependency tree should perform cargo update, which will pull in the updated, unaffected code.

    Users of time 0.1 do not have a patch and should upgrade to an unaffected version: time 0.2.23 or greater or the 0.3 series.

    Workarounds

    No workarounds are known.

    References

    time-rs/time#293

    See advisory page for additional details.

    bug Security 
    opened by github-actions[bot] 2
  • Bump nom from 7.1.1 to 7.1.2

    Bump nom from 7.1.1 to 7.1.2

    Bumps nom from 7.1.1 to 7.1.2.

    Changelog

    Sourced from nom's changelog.

    7.1.2 - 2023-01-01

    Thanks

    Changed

    • documentation fixes
    • tests fixes
    • limit the initial capacity of the result vector of many_m_n to 64kiB
    • bits parser now accept Parser implementors instead of only functions

    Added

    • implement Tuple parsing for the unit type as a special case
    • implement ErrorConvert on the unit type to make it usable as error type for bits parsers
    • bool parser for bits input
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Bump serde from 1.0.151 to 1.0.152

    Bump serde from 1.0.151 to 1.0.152

    Bumps serde from 1.0.151 to 1.0.152.

    Release notes

    Sourced from serde's releases.

    v1.0.152

    • Documentation improvements
    Commits
    • ccf9c6f Release 1.0.152
    • b25d0ea Link to Hjson data format
    • 4f4557f Link to bencode data format
    • bf400d6 Link to serde_tokenstream data format
    • 4d2e36d Wrap flexbuffers bullet point to 80 columns
    • df6310e Merge pull request #2347 from dtolnay/docsrs
    • 938ab5d Replace docs.serde.rs links with intra-rustdoc links
    • ef5a0de Point documentation links to docs.rs instead of docs.serde.rs
    • 5d186c7 Opt out -Zrustdoc-scrape-examples on docs.rs
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Evaluate if we follow the state checks close enough

    Evaluate if we follow the state checks close enough

    It may be that we don't follow all the state checks yet. While this usually will just crash the connection, we should make sure to print proper errors in those cases instead.

    enhancement 
    opened by MTRNord 0
  • Honeypot Mode

    Honeypot Mode

    This fixes #41

    It implements a honeypot collector, basically. It behaves like an open relay, but actively at compile time makes sure that it cannot send any email. So it is safe to use.

    opened by MTRNord 0
  • Honeypot mode

    Honeypot mode

    This is more a "cool to have" feature to add along the way and should be a compiletime flag.

    Basically I receive lots of spam on my test instance. I was wondering if I can safely accept this.

    The differences needed would be:

    • [x] It should pretend to accept stuff and behave like an open relay
    • [x] It should fully not compile the sending parts of the server to make sure this doesnt actually send emails ever.
    • [x] It should send things to rspamd
    • [x] It should log the content and requests to a file format on disk
    • [ ] It should generate a list of shasums to check if we got it before.
      • [x] The sum must be only over the body
      • [ ] If it is seen multiple times we record the target address among the previous attempt
    • [ ] We should record the rspamd result
    • [ ] We should auto commit new files to git
    • [ ] We should have a way to send undetected things to rspamd to make sure they have learned this.
    opened by MTRNord 0
  • Integration with rspamd

    Integration with rspamd

    There are currently seemingly 2 ways of connecting this to rspamd.

    One being the milter proto and the other one using the http api. On first sight, the http one seems a lot nicer.

    I asked about this in https://matrix.to/#/!tNuTutAsraCZsJFZOS:matrix.org/$kijaM-MAMgzHYcpBBhQwLteRbSFFNu3Om_pZBzt7Sew?via=matrix.org&via=midnightthoughts.space (their irc) what the best option is.

    It probably makes sense to do this using some kind of modular trait thingy to be able to integrate alternatives too.

    enhancement help wanted 
    opened by MTRNord 3
Rust library to parse mail files

mailparse A simple parser for MIME email messages. API The primary entry point for this library is the following function: parse_mail(&[u8]) -> Re

Kartikaya Gupta (kats) 150 Dec 27, 2022
Fast and robust e-mail parsing library for Rust

mail-parser mail-parser is an e-mail parsing library written in Rust that fully conforms to the Internet Message Format standard (RFC 5322), the Multi

Stalwart Labs 158 Jan 1, 2023
E-mail delivery library for Rust with DKIM support

mail-send mail-send is a Rust library to build, sign and send e-mail messages via SMTP. It includes the following features: Generates e-mail messages

Stalwart Labs 165 Oct 23, 2023
Mjml - the only framework that makes responsive-email easy

MJML 4 If you're looking for MJML 3.3.X check this branch | Translated documentation | Introduction | Installation | Usage | Translated documentation

MJML 14.8k Jan 6, 2023
📫Himalaya: CLI email client written in Rust.

??Himalaya: CLI email client written in Rust.

Clément DOUIN 2.1k Jan 7, 2023
Check if an email address exists without sending any email, written in Rust.

Check if an email address exists without sending any email, written in Rust.

Reacher 3.5k Dec 31, 2022
An ESMTP server library written in Rust.

rs-smtp An ESMTP server library written in Rust. Features ESMTP client & server implementing RFC 5321 Support for SMTP AUTH and PIPELINING UTF-8 suppo

DUNEF 3 Apr 15, 2023
新しい IMAP client in Rust

新しい IMAP client 新しい (atarashii/new) IMAP client in Rust. It supports plain and secure connections. In progress It's under development... Usage Put thi

Alex Maslakov 39 Sep 13, 2020
Unofficial Rust library for the SendGrid API

sendgrid-rs Unofficial Rust library for the SendGrid API. This crate requires Rust 1.15 or higher as it uses a crate that has a custom derive implemen

Garrett Squire 88 Dec 27, 2022
a mailer library for Rust

lettre A mailer library for Rust NOTE: this readme refers to the 0.10 version of lettre, which is still being worked on. The master branch and the alp

lettre 1.3k Jan 4, 2023
Implementation of mjml in rust

MRML Introduction This project is a reimplementation of the nice MJML markup language in Rust. How to use it use mrml; fn main() { match mrml::to

Jérémie Drouet 228 Dec 28, 2022
Rust implementation of catapulte email sender

Catapulte What is catapulte? Catapulte is an open source mailer you can host yourself. You can use it to quickly catapult your transactionnal emails t

Jérémie Drouet 108 Dec 14, 2022
A rewrite of the server side parts of emersion/go-smtp package into rust.

rust-smtp-server A rust smtp server library. It's mainly a rewrite of the server side parts of the emersion/go-smtp library. Features Usage Add this t

Nick Westendorf 3 Apr 26, 2023
mail-builder is a flexible e-mail builder library written in Rust that generates RFC5322 compliant e-mail messages

mail-builder mail-builder is a flexible e-mail builder library written in Rust that generates RFC5322 compliant e-mail messages. The library has full

Stalwart Labs 37 Dec 19, 2022
A static mail HTML archive for the 21st century, written in Rust

?? Crabmail ?? self-hosted / github mirror A static mail HTML archive for the 21st century, written in Rust. Includes helpful "modern" features that e

Alex Wennerberg 18 Oct 11, 2022
Rust library to parse mail files

mailparse A simple parser for MIME email messages. API The primary entry point for this library is the following function: parse_mail(&[u8]) -> Re

Kartikaya Gupta (kats) 150 Dec 27, 2022
Fast and robust e-mail parsing library for Rust

mail-parser mail-parser is an e-mail parsing library written in Rust that fully conforms to the Internet Message Format standard (RFC 5322), the Multi

Stalwart Labs 158 Jan 1, 2023
E-mail delivery library for Rust with DKIM support

mail-send mail-send is a Rust library to build, sign and send e-mail messages via SMTP. It includes the following features: Generates e-mail messages

Stalwart Labs 165 Oct 23, 2023
🦚 A web-app pentesting suite written in rust .

Kanha - A web-app pentesting suite written in rust ?? Installation ⦾ Subcommands ⦾ Contribute Kanha is a tool that can help you perform, a variety of

Nabeen Tiwaree 79 Sep 19, 2023
A command line interface meant to bridge the gap between Rust and shell scripting

clawbang A command line interface meant to bridge the gap between Rust and shell scripting. Intended for use with HEREDOCs and shebangs: $ clawbang <<

Chris Dickinson 52 Mar 25, 2022